
자바스크립트는 객체(object) 기반의 프로그래밍 언어이며, 원시 값을 제외한 나머지 값(함수, 배열, 정규 표현식 등)은 모두 객체다.
원시 타입은 단 하나의 값만 나타내지만 객체 타입(object/reference type)은 다양한 타입의 값(원시 값 또는 다른 객체)을 하나의 단위로 구성한 복합적인 자료구조(data structure)다.
원시 타입의 값, 즉 원시 값은 변경 불가능한 값(immutable value)이지만 객체 타입의 값, 즉 객체는 변경 가능한 값(mutable value)이다.
객체는 0개 이상의 프로퍼티로 구성된 집합이며, 프로퍼티는 키(key)와 값(value)으로 구성된다.
var person = {
// 객체는 프로퍼티의 집합이다.
name: 'Lee',
age: 20
};
자바스크립트에서 사용할 수 있는 모든 값은 프로퍼티 값이 될 수 있다.
자바스크립트의 함수는 일급 객체이므로 값으로 취급할 수 있으며, 프로퍼티 값으로 사용할 수 있다.
프로퍼티 값이 함수일 경우, 일반 함수와 구분하기 위해 매서드(method)라 부른다.
var counter = {
num: 0, // 프로퍼티: 객체의 상태를 나타내는 값(data)
increase: function() {
// 매서드:
// 프로퍼티(상태 데이터)를 참조하고 조작할 수 있는 동작(behavior)
this.num++;
}
}
객체 리터럴, Object 생성자 함수, 생성자 함수, Object.create 메서드, 클래스(ES6)
var person = {
name: 'Lee',
sayHello: function () {
console.log(`Hello! My name is ${this.name}.`);
}
};
console.log(typeof person); // object
console.log(person); // {name: "Lee", sayHello: f}
객체 리터럴의 중괄호는 코드 블록을 의미하지 않는다는 것에 주의하자. (세미클론을 꼭 붙여 주어야 한다.)
객체 리터럴은 자바스크립트의 유연함과 강력함을 대표하는 객체 생성 방식이다.
객체 리터럴 외의 객체 생성 방식은 모두 함수를 사용해 객체를 생성한다.
var person = {
// key: value
name: 'Lee',
age: 20
}
프로퍼티 키와 값으로 사용할 수 있는 값
- 프로퍼티 키: 빈 문자열을 포함하는 모든 문자열 또는 심벌 값
- 프로퍼티 값: 자바스크립트에서 사용할 수 있는 모든 값
식별자 네이밍 규칙을 따르지 않는 키(key)값 에는 반드시 따옴표를 사용해야한다.
가급적 식별자 네이밍 규칙을 준수하는 프로퍼티 키를 사용하자.
var person = {
firstName: 'Dong', // 식별자 네이밍 준수
'last-name': 'Lee' // 식별자 네이밍 미준수
};
console.log(person); // {firstName: 'Dong', last-name: 'Lee'}
var person = {
firsName: 'Dong',
last-name: 'Lee' // SyntaxError: Unexpected token ...
}
var obj = {};
var key = 'hello';
// ES5: 프로퍼티 키 동적 생성
obj[key] = 'world';
// ES6: 계산된 프로퍼티 이름
// var obj = { [key]: 'world' };
console.log(obj); // {hello: 'world'}
var foo = {
// 따옴표는 붙지 않지만 내부적으로는 문자열로 변환된다.
0: 1,
1: 2,
2: 3,
};
var foo = {
name: 'Lee',
name: 'Kim'
};
console.log(foo); // {name: 'Kim'}
* 모던 자바스크립트 Deep Dive ( 자바스크립트의 기본 개념과 동작 원리 ) / 이웅모 지음
잘 보고 갑니다~