Array.prototype[@@unscopables]

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

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

Property attributes of Array.prototype[@@unscopables]
쓰기 가능불가능
열거 가능불가능
설정 가능가능

설명

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® 2025 Language Specification
# sec-array.prototype-%symbol.unscopables%

브라우저 호환성

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
[Symbol.unscopables]

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

같이 보기