JS에서 원시 타입의 값 을 제외한 나머지 값은 모두 객체이다.
원시 타입의 값은 변경이 불가능하지만 객체 타입의 값은 변경이 가능하다
다른 객체 지향 언어와 다르게 JS는 생성자 없이도 객체를 생성할 수 있다. 객체를 생성하는 5가지 방법은
객체는 프로퍼티의 집합이며 프로퍼티는 키와 값으로 구성한다
이때 프로터피의 이름은 식별자 네이밍 규칙을 따르지 않아도 되지만 따르지 않을 때는 반드시 따옴표로 덮어줘 문자열로 바꿔줘야한다
프로퍼티 규칙
JS는 모든 값이 프로퍼티 값으로 사용될 수 있다.
이때 프로퍼티값으로 사용된 함수를 일반함수와 구별하기 위해 메서드라고 부른다
프로퍼티에 접근하는 방법은 두가지가 있다.
대괄호 프로퍼티 접근 연산자 내부에 지정하는 프로퍼티 기는 반드시 따옴표로 감싼 문자열이어야 한다
프로피터 키가 식별자 네이밍 규칙을 준수 하지 않는 이름이라면 반드시 대괄호 표기법을 사용해야 한다. 단, 프로퍼티 키가 숫자인 경우에는 따옴표를 생략하고 사용할 수 있다 .
이미 존재하는 프로퍼티에 값을 할당하면 프로퍼티 값이 갱신됨
존재하지 않는 프로퍼티에 값을 할당하면 프로퍼티가 동적으로 생성되어 추가되고 프로퍼티 값이 할당됨
delete 연산자는 객체의 프로퍼티를 삭제함, 만약 존재하지 않는 프로퍼티면 무시됨
ES6이후로 프로퍼티 값으로 변수를 사용하는 경우 키값과 변수가 동일하면 축약해서 사용가능함
메서드도 축약해서 사용가능한데
ES5까지는 프로퍼티 값으로 함수를 할당했지만
ES6부터는 function 키워드를 생략한 표현을 함
cf) 정확하게 말하면 두개는 다른 것임. 동작방식이 다름
ES6이후로는 메서드를 function 키워드를 생략한 표현으로 정의했으며 ES6 메서드는 인스턴스를 생성할 수 없는 메서드이고, 자신을 바인딩한 객체를 가리키는 내부슬롯을 가져서 super키워드를 사용할 수 있음.