: 다양한 타입의 값을 한 단위로 구성한 자료구조이다.
** 원시 타입의 값은 변경 불가능한 값이지만 객체 타입의 값,
즉 객체는 변경 가능한 값이다.
let person = {
name: "Jeong",
age: 21
};
키(key)와 값(value)으로 구성되며 함수도메서드(method)라 부른다.let count = {
number : 0,
increase : function () { //메서드
this.number+=2;
}
};
: 리터럴(literal)은 사람이 이해할 수 있는 문자나 약속된 기호를 사용해 값을 생성하는 표기법이다. 따라서 객체 리터럴은 객체를 생성하기 위한 표기법이다.
객체 리터럴은 클래스를 먼저 정의하고 new 연산자와 함께 생성자를 호출할 필요가 없다.
프로퍼티를 포함시켜 객체를 생성과 동시에 프로퍼티를 만들 수 있으며, 객체 생성 이후에 프로퍼티를 동적으로 추가할 수도 있다.
let person = {
firstName : 'Jimin', //식별자 네이밍 규칙 준수한 키
'last-name' : 'Jeong' //식별자 네이밍 규칙 준수 x
};
key는 프로퍼티 값에 접근할 수 있는 이름으로 식별자 역할을 한다. 식별자 네이밍 규칙을 준수하는 이름은 따옴표를 생략 가능하다. 따라서 식별자 네이밍 규칙을 따르지 않으면 반드시 따옴표를 사용한다. value는 일반적으로 문자열을 사용한다. <프로퍼티 키를 동적으로 생성하는 방식>
let obj = {};
obj["hello"] = "bye";
console.log(obj); // {hello: "bye"}
let num = {
0 : 1,
1 : 2
};
console.log(num[0]) //1
console.log(num["0"]) //1
var,function과 같은 예약어를 프로퍼티 키로 사용하면 에러가 발생할 여지가 있어 권장하지 않는다.
이미 존재하는 프로퍼티 키를 중복 선언할 경우,
나중에 선언한 프로퍼티가 먼저 선언한 프로퍼티를 덮어쓴다.
let obj = {
lastName : "Jeong",
lastName : "Lee"
};
console.log(obj); // {lastName : "Lee"}
자바스크립트의 함수는 객체로 값으로 취급할 수 있기 때문에
프로퍼티 값으로 사용할 수 있다.
let count = {
num : 0,
increase : function() { //메서드
this.num += 2
return this.num;
}
};
console.log(count.increase()); // 2
count를 가리키는 참조 변수이다. let person = {
name : "Stella"
};
console.log(person.name); // Stella
console.log(person['name']) // Stella
cosnole.log(person[name]) // undeinfed
객체를 정의할 때, 프로퍼티 키 name은 식별자 네이밍 규칙을 준수하므로 따옴표를 쓸 필요가 없다.
❗그러나 대괄호 표기법에 의한 프로퍼티 접근할 경우, 프로퍼티 키는 반드시 따옴표로 감싼 문자열이어야 한다.
객체에 존재하지 않는 프로퍼티에 접근하면 undefined를 반환함.
✨ 단, 프로퍼티 키가 숫자로 된 문자열인 경우 따옴표를
생략할 수 있다. 그 외의 경우 대괄호 내에 들어가는 프로퍼티 키는 반드시 따옴표로 감싼 문자열이어야 한다!
let person = {
name : "Jimin",
age : 20
};
person.hobby = "singing" // 프로퍼티 동적 생성
conosle.log(person) // {name: 'Jimin', age: 20, hobby: 'singing'}
delete person.age // age 프로퍼티 삭제
console.log(person); // {name: 'Jimin', hobby: 'singing'}
let x = 1, y = 2;
let obj = {x,y}; //프로퍼티 축약 표현
console.log(obj); // {x: 1, y: 2}
let increase = "up";
let num = 0;
let count = {
[`${increase}-${++num}`] : num,
[`${increase}-${++num}`] : num
};
console.log(count); // {up-1: 1, up-2: 2}
let person = {
name : "Jimin",
hello() {
console.log("Hello,I'm "+ this.name);
}
};
person.hello(); //Hello,I'm Jimin