1. 내부 슬롯과 내부 메서드

🔧 자바스크립트 엔진의 구현 알고리즘을 설명하기 위해 ECMAScript 사양에서 사용하는 의사 프로퍼티와 의사 메서드다.

[[…]]로 감싼 이름들이 내부 슬롯과 내부 메서드다.

개발자가 직접 접근할 수 있도록 외부로 공개된 객체의 프로퍼티는 아니다.

<aside> 💡 자바스크립트 엔진의 내부 로직이므로 원칙적으로 자바스크립트는 내부슬롯과 내부 메서드에 직접적으로 접근하거나, 호출 할 수 있는 방법을 제공하지 않는다.

</aside>

🤮 예외 케이스

[[Prototype]] 은 내부 슬롯이지만 __proto__를 통해 간접적으로 접근 할 수 있다.

const o = {};
// 자바스크립트 엔진 내부 로직이므로 직접 접근 못함
o.[[Prototype]] // *Uncaught SyntaxError* 
// 단, 일부 내부 슬롯과 내부 메서드에 한하여 간접적으로 접근할 수 있는 수단 제공
o.__proto__ // Object.prototype

2. 프로퍼티 어트리뷰트와 프로퍼티 디스크립터 객체

<aside> 💡 자바스크립트 엔진은 프로퍼티를 생성할 때 프로퍼티의 상태를 나타내는 프로퍼티 어트리뷰트를 기본값으로 자동 정의한다.

</aside>

프로퍼티 어트리뷰트는 자바스크립트 엔진이 관리하는 내부 상태값인 내부 슬롯 4가지 이다.

  1. [[Value]] : 프로퍼티의 값
  2. [[Writable]] : 값의 갱신 가능 여부
  3. [[Enumerable]] : 열거 가능 여부
  4. [[Configurable]] : 재정의 가능 여부
const person = {
    name : 'Lee'
};
// 프로퍼티 어트리뷰트 정보를 제공하는 프로퍼티 디스크립터 객체 반환.
console.log(Object.getOwnPropertyDescriptor(person, 'name'));

// {value: 'Lee', writable: true, enumerable: true, configurable: true}

스크린샷 2022-07-03 오후 10.34.34.png