Array.prototype[@@unscopables]

Array.prototype@@unscopable 데이터 속성은 모든 Array 인스턴스에서 공유됩니다. 여기에는 ES2015 버전 이전에는 ECMAScript 표준에 포함되지 않았고, with 문 바인딩을 위해 무시되는 속성 이름이 포함되어 있습니다.

아래에 있는 속성 이름과 해당 값이 true로 설정된 널 프로토타입 객체입니다.

Property attributes of Array.prototype[@@unscopables]
Writable 불가능
Enumerable 불가능
Configurable 가능

설명

with 문 바인딩 목적으로 무시되는 기본 Array 속성은 다음과 같습니다.

Array.prototype[@@unscopables]는 위의 모든 속성 이름과 true 값만 포함하는 빈 객체입니다. 이 객체의 프로토타입은 null이므로 실수로 toString과 같은 Object.prototype 속성은 범위 지정이 불가능해지지 않으며, with 문 내의 toString()은 배열에서 계속 호출됩니다.

객체에 범위 지정 불가능 속성을 설정하는 방법은 Symbol.unscopables를 참조하세요.

예제

아래의 keys.push('something') 호출이 ECMAScript 2015 이전에 작성된 코드에 있다고 가정해 보겠습니다.

js
var keys = [];

with (Array.prototype) {
  keys.push("something");
}

ECMAScript 2015에 Array.prototype.keys() 메서드가 도입되었을 때, @@unscopables 데이터 속성이 함께 도입되지 않았다면, JavaScript 런타임이 keys를 예제 코드에 정의된 keys 배열이 아닌 Array.prototype.keys() 메서드로 해석하기 때문에 해당 keys.push('something') 호출이 중단될 수 있었습니다.

따라서 Array.prototype에 대한 @@unscopables 데이터 속성을 사용하면 ECMAScript 2015에 도입된 Array 속성이 with 문 바인딩 목적으로 무시되므로 ECMAScript 2015 이전에 작성된 코드가 중단되지 않고 예상대로 계속 작동할 수 있습니다.

명세서

Specification
ECMAScript Language Specification
# sec-array.prototype-%symbol.unscopables%

브라우저 호환성

BCD tables only load in the browser

같이 보기