원시값
객체
프로퍼티(key value 쌍)로 구성
생성
let obj = new Object();
let obj ={}; // 객체 리터럴
let hwi = {
name: "hi",
age: 20,
"is human": true,
};
수정
hwi.name = 'hwi';
hwi["is human] = false
삭제
delete hwi.name
delete hwi["is human"]
동적인 키
변수 입력된 값으로 접근할 수 있음
let key = "is human";
hwi["is human"] = true;
동적으로 key를 사용할 때 대괄호 입력
function dog(name) {
let obj = {
[name]: 5,
};
}
key와 value 값이 같으면 단축 가능
return {
name,
age,
}
key는 문자형이기 때문에 예약어와 같은 이름 가능
__proto__
는?in
for (key in obj) { }
메서드
생성자
new Dog();
optional chaining
?.
문자형과 함께 객체 프로퍼티의 키로 사용
유일한 키
Symbol("key")
: 같은 문자열로 심볼을 만들어도 다른 심볼이면 서로 다름let key1 = Symbol("key");
let key2 = Symbol("key");
// key1 == key2 (flase)
let dog = {
name: "arrr",
[key2]: 55,
};
dog[key1] = 1; // 사용 예시
심볼은 확장을 위한 기능
심볼형은 암시적 변환 X
심볼을 키로 만든 프로퍼티는 hidden property
for let key in obj
: 반복문에 포함되지 않음global symbol registry
system symbol: 내장 심볼
Symbol.toPrimitive(hint)
메서드가 있으면 호출 (시스템 심볼)toString
또는 valueOf
호출 (toString이 없으면 valueOf)valueOf
또는 toString
호출[object Object]
참조
https://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection