틸노트 자바스크립트
오브젝트
오브젝트는 객체로 임의의 속성 모음을 이야기 한다. 객체를 사용하는 방법은 표현식에 중괄호를 사용하는 것이다.
let day1 = {
squirrel: false,
events: ['work', 'touched tree', 'pizza', 'running']
};
console.log(day1.squirrel);
// -> false
중괄호 안에 콤마로 구분된 속성 목록으로 표현한다. 각 속성에는 이름이 있고 다음으로 콜론(:) 과 값이 이어진다. 속성의 이름이 사용 가능한 바인딩 이름이나 숫자가 아니라면 따옴표로 묶어야 한다.
let desc = {
work: "Went to work",
"touched tree": "Touched a tree"
}
delete 연산자는 이름에 해당하는 속성을 제거한다.
delete anObject.left;
console.log(anObject.left);
// -> undefined
이항 연산자 in은 해당 객체에 해당 속성이 있는지 여부를 알려준다.
console.log("left" in anObject);
// -> false;
객체의 속성을 확인하려면 Object.keys 함수를 사용한다. 이 함수에 객체를 전달하면 객체의 속성 이름을 문자열 배열로 반환한다.
console.log(Object.keys({x: 0, y: 0, z: 1}));
// -> ["x", "y", "z"];
Object.assign 함수는 한 객체의 모든 속성을 다른 객체로 복사한다.
let objectA = { a: 1, b: 2 };
Object.assign(objectA, { b: 3, c: 4 });
console.log(objectA);
// -> { a: 1, b: 3, c: 4 }
객체의 참조와 속성
객체는 동일한 참조를 가리키는 것와 같은 속성을 가지고 있는것은 차이가 있다.
let object1 = { value : 10 };
let object2 = object1;
let object3 = { value: 10 };
이 경우 object1과 object2는 동일한 객체를 가지고 있으므로 object1 의 값을 변경하면 object2의 값도 변경된다. 이것을 같은 아이덴티티를 가지고 있다고 말한다. 하지만 object3 바인딩은 다른 객체를 바라보고 있으며 object1과 같은 속성을 가지고 있지만 별개로 동작한다. (다른 메모리값을 가르키고 있다.)
객체의 경우 let 으로 하면 속성값을 변경할 수 있고 const 로 하면 속성값을 변경할 수 있지만 재할당을 하지는 못한다.
const score = { visitors: 0, home: 0 };
// 허용됨
score.visitors = 1;
// 허용되지 않음
score = {visitors: 1, home: 1};