🔧 자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티와 의사 메서드다.
[[…]]로 감싼 이름들이 내부 슬롯과 내부 메서드다.
개발자가 직접 접근할 수 있도록 외부로 공개된 객체의 프로퍼티는 아니다.
<aside> 💡 자바스크립트 엔진의 내부 로직이므로 원칙적으로 자바스크립트는 내부슬롯과 내부 메서드에 직접적으로 접근하거나, 호출 할 수 있는 방법을 제공하지 않는다.
</aside>
🤮 예외 케이스
[[Prototype]] 은 내부 슬롯이지만 __proto__를 통해 간접적으로 접근 할 수 있다.
const o = {};
// 자바스크립트 엔진 내부 로직이므로 직접 접근 못함
o.[[Prototype]] // *Uncaught SyntaxError*
// 단, 일부 내부 슬롯과 내부 메서드에 한하여 간접적으로 접근할 수 있는 수단 제공
o.__proto__ // Object.prototype
<aside> 💡 자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 자동 정의한다.
</aside>
프로퍼티 어트리뷰트는 자바스크립트 엔진이 관리하는 내부 상태값인 내부 슬롯 4가지 이다.
const person = {
name : 'Lee'
};
// 프로퍼티 어트리뷰트 정보를 제공하는 프로퍼티 디스크립터 객체 반환.
console.log(Object.getOwnPropertyDescriptor(person, 'name'));
// {value: 'Lee', writable: true, enumerable: true, configurable: true}