const obj = {name = 'gunho' , age : 25}
const obj2 = {}
두 가지의 객체에서 우린 각각의 비교를 해볼 것이다.
console.log({} === {}} // 1
console.log(obj === obj2) // 2
결과를 예측해보자
결과는 둘다 false 이다.
객체는 범위를 가르키는데 우리가 할당해놓은 객체를 사용할때가 아니라면
즉 빈 객체나 새로 만든 객체라면 다 다르다고 생각해야한다.
똑같아보여도 주소값 , 메모리영역이 다 다르기 때문이다.
자바스크립트는 객체 기반의 프로그래밍 언어이다.
자바스크립트를 구성하는 거의 모든 것이 객체라고 할 수 있다.
객체는 0개 이상의 프로퍼티로 구성된 집합이며,
프로퍼티는 키와 값으로 구성된다.
let preson = {
name : 'gun' ,
age : 20 ,
}
위 객체에서 프로퍼티는
name : 'gun' ,
age : 20
name , age 가 프로퍼티 키 'gun' , 20 을 프로퍼티 값이라고 한다
객체는 프로퍼티의 집합이다.
let counter = {
num : 0, (위에 말했던거처럼 프로퍼티)
increase : function (){
this.num++;
}
메서드를 쉽게 말하면 객체 안에 있는 함수를 메서드라고 할 수 있다.
메서드는 프로퍼티를 참조하고 조작할 수 있는 동작을 말한다.
- 객체 리터럴
- Object 생성자 함수
- 생성자 함수
- Object.create 메서드
- 클래스(ES6)
이러한 객체 생성 방법중 가장 간단하고 일반적인 방법은
객체 리터럴을 사용하는 방법이다.
객체는 프로퍼티의 집합이며, 프로퍼티는 키와 값으로 구성된다.
let person = {
name : 'gun' ,
age : 25
}
*** 프로퍼티를 나열할때는 쉼표로 구분한다
마지막 프로퍼티에는 사용하지 않아도 되지만 사용해도 상관없다.
let person = {
firstName = 'gunho'
'last-name' = 'yun' // syntaxError
프로퍼티 키를 사용할때는 네이밍 규칙을 지켜야한다.
프로퍼티에 접근하는 방법은
마침표 프로퍼티 접근 연산자(.)
대괄호 프로퍼티 접근 연산자([...])
위 두가지이다.
let person = {
name : 'gun' ,
} ;
마침표 표기법에 의한 프로퍼티 접근
console.log(person.name); // gun 출력
대괄호 표기법에 의한 프로퍼티 접근
console.log(person['name']); // gun 출력
대괄호 표기법에서의 주의할 점은
반드시 따옴표로 감싼 문자열로 작성해야 한다는 것이다.
따옴표로 감싸지않은 이름을 프로퍼티 키로 사용하면 자바스크립트 엔진에서
식별자로 해석하기 떄문에 에러가 발생한다.
let person = {
name : 'gun'
};
console.log(person[name]); // ReferenceError : name is not defined
참고로 객체에 존재하지 않는 프로퍼티에 접근을 하게되면 undefiend 를 반환한다.
이때 ReferenceError 가 발생하지 않으니 주의해야 한다.
존재하지 않는 프로퍼티에 값을 할당하면 프로퍼티가 동적으로 생성되어 추가되고
프로퍼티 값이 할당된다.
let person = {
name : 'gun'
};
현재 person 에는 age 가 존재하지 않는다.
따라서 person 객체에 age 프로퍼티가 동적으로 생성되고 값이 할당된다.
person.age = 20;
console.log(person); // {name : "gun" , age : 20}