자바스크립트는 객체 기반의 프로그래밍 언어이며, 자바스크립트를 구성하는 거의 "모든 것"이 객체다. 원시 값을 제외한 나머지 값(함수, 배열, 정규 표현식 등)은 모두 객체다.
원시 타입 값(원시값): 변경 불가능한 값(immutable value)
객체 타입의 값 (객체): 변경 가능한 값(mutable value) (함수, 배열, 정규 표현식 등 원시 값 제외 나머지)
객체: 프로퍼티로 이루어짐. 프로퍼티는 키와 값으로 구성.
c,자바 언어: 클래스 기반 객체지향 언어
자바스크립트: 프로토타입 기반 객체지향 언어
차이점 : 클래스 기반 객체지향 언어와는 달리 다양한 객체 생성 방법을 지원
객체 리터럴 : =값으로 평가되는 표현식 ≠ 코드블록
닫는 중괄호 뒤에 세미콜론(;)을 붙임
객체: 프로퍼티의 집합이며, 프로퍼티는 키와 값으로 구성
var person = {
// 프로퍼티 키는 name, 프로퍼티 값은 'Lee'
name: 'Lee',
// 프로퍼티 키는 age, 프로퍼티 값은 20
age: 20
};
**에러 상황
var person = {
firstName: 'Ung-mo',
last-name: 'Lee' // SyntaxError: Unexpected token -
}; //last-name을 -연산자가 있는 표현식으로 해석
**따옴표 사용
var person = {
firstName: 'Ung-mo', // 식별자 네이밍 규칙을 준수하는 프로퍼티 키
'last-name': 'Lee' // 식별자 네이밍 규칙을 준수하지 않는 프로퍼티 키
};
console.log(person); // {firstName: 'Ung-mo', last-name: 'Lee'}
상황: 빈 객체에 {hello: "world"}를 만들고 싶다면?!
var obj = {}; // 1. 객체 생성
var key = 'hello'; // 2. 키 네이밍
obj[key] = 'world'; // 3. 키에 값 부여
console.log(obj); //{hello:"world"}
1.객체 생성 var object = {};
2.키 네이밍 var key = '키네임';
3.값 부여 var obj[key] = 'value';
object = {키네임 : "value"};
var foo = {
name : "Lee",
name : "Kim"
};
console.log(foo); // {name: "Kim"}
2가지 에러
1- 대괄호 표기법에서 따옴표로 감싸지 않았을 경우
엔진은 이를 식별자로 해석하고 레퍼런스에러를 발생함
(단!! 숫자는 따옴표 생략 가능)
var person = {
name: 'Lee'
};
console.log(person[name]);
//ReferenceError: name is not defined
2- 객체에 존재하지 않는 프로퍼티에 접근하는 경우
var person = {
name: 'Lee'
};
console.log(person.age); //undefined
대괄호 프로퍼티 접근 연산자 내부에 지정하는 프로퍼티 키는 반드시 따옴표로 감싼 문자열이어야 한다. 대괄호 프로퍼티 접근 연산자 내에 따옴표로 감싸지 않은 이름을 프로퍼티 키로 사용하면 자바스크립트 엔진은 식별자로 해석한다.
객체에 존재하지 않는 프로퍼티에 접근하면 undefined를 반환한다. 이때 ReferenceError가 발생하지 않는 데 주의하자.
프로퍼티 키가 식별자 네이밍 규칙을 준수하지 않는 이름, 즉 자바스크립트에서 사용 가능한 유효한 이름이 아니면 반드시 대괄호 표기법을 사용해야 한다. 단, 프로퍼티 키가 숫자로 이뤄진 문자열인 경우 따옴표를 생략할 수 있다. 그 외의 경우 대괄호 내에 들어가는 프로퍼티 키는 반드시 따옴표로 감싼 문자열이어야 한다는 점을 잊지 말자.
var person = {
name: 'Lee'
};
// person 객체에 name 프로퍼티가 존재하므로 name 프로퍼티의 값이 갱신된다.
person.name = 'Kim';
console.log(person); // {name: "Kim"}
var person ={
name: 'Lee'
};
// person 객체에는 age 프로퍼티가 존재하지 않는다.
// 따라서 person 객체에 age 프로퍼티가 동적으로 생성되고 값이 할당된다.
person.age = 20;
console.log(person); // {name: "Lee", age: 20}
var person = {
name: "Lee",
age: "20"
};
delete person.age; // person {name : "Lee"}
delete person.address; // 존재하지 않는 프로퍼티를 삭제해도 에러가 발생하지 않음