Array.prototype[@@unscopables]
Array.prototype
의 @@unscopable
데이터 속성은 모든 Array
인스턴스에서 공유됩니다. 여기에는 ES2015 버전 이전에는 ECMAScript 표준에 포함되지 않았고, with
문 바인딩을 위해 무시되는 속성 이름이 포함되어 있습니다.
값
아래에 있는 속성 이름과 해당 값이 true
로 설정된 널 프로토타입 객체입니다.
Property attributes of Array.prototype[@@unscopables] |
|
---|---|
Writable | 불가능 |
Enumerable | 불가능 |
Configurable | 가능 |
설명
with
문 바인딩 목적으로 무시되는 기본 Array
속성은 다음과 같습니다.
at()
copyWithin()
entries()
fill()
find()
findIndex()
findLast()
findLastIndex()
flat()
flatMap()
includes()
keys()
toReversed()
toSorted()
toSpliced()
values()
Array.prototype[@@unscopables]
는 위의 모든 속성 이름과 true
값만 포함하는 빈 객체입니다. 이 객체의 프로토타입은 null
이므로 실수로 toString
과 같은 Object.prototype
속성은 범위 지정이 불가능해지지 않으며, with
문 내의 toString()
은 배열에서 계속 호출됩니다.
객체에 범위 지정 불가능 속성을 설정하는 방법은 Symbol.unscopables
를 참조하세요.
예제
아래의 keys.push('something')
호출이 ECMAScript 2015 이전에 작성된 코드에 있다고 가정해 보겠습니다.
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