Array : propriété [Symbol.unscopables]
La propriété de données [Symbol.unscopables] de Array.prototype est partagée par toutes les instances de Array. Elle contient les noms de propriétés qui n'étaient pas inclus dans la norme ECMAScript avant la version ES2015 et qui sont ignorés lors de la liaison avec l'instruction with.
Valeur
Un objet à prototype null avec les noms de propriétés donnés ci-dessous et leurs valeurs fixées à true.
Attributs de Array : propriété [Symbol.unscopables] | |
|---|---|
| Écrivable | Non |
| Énumérable | Non |
| Configurable | Oui |
Description
Les propriétés par défaut de Array qui sont ignorées lors de la liaison avec l'instruction with sont :
Array.at()Array.copyWithin()Array.entries()Array.fill()Array.find()Array.findIndex()Array.findLast()Array.findLastIndex()Array.flat()Array.flatMap()Array.includes()Array.keys()Array.toReversed()Array.toSorted()Array.toSpliced()Array.values()
Array.prototype[Symbol.unscopables] est un objet vide ne contenant que tous les noms de propriétés ci-dessus avec la valeur true. Son prototype est null, donc les propriétés de Object.prototype comme toString ne seront pas rendues involontairement non accessibles, et un appel à toString() dans une instruction with continuera d'être appelé sur le tableau.
Voir Symbol.unscopables pour savoir comment définir des propriétés non accessibles pour vos propres objets.
Exemples
Imaginez que l'appel à values.push('something') ci-dessous se trouve dans un code écrit avant ECMAScript 2015.
var values = [];
with (values) {
values.push("something");
}
Lorsque ECMAScript 2015 a introduit la méthode Array.prototype.values(), l'instruction with dans le code ci-dessus a commencé à interpréter values comme la méthode de tableau values.values au lieu de la variable externe values. L'appel à values.push('something') échouerait car il accède maintenant à push sur la méthode values.values. Cela a provoqué un bug signalé à Firefox (Bug Firefox 883914 (angl.)).
Ainsi, la propriété de données [Symbol.unscopables] de Array.prototype fait en sorte que les propriétés de Array introduites dans ECMAScript 2015 soient ignorées lors de la liaison avec l'instruction with — permettant au code écrit avant ECMAScript 2015 de continuer à fonctionner comme prévu, plutôt que de casser.
Spécifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-array.prototype-%symbol.unscopables%> |
Compatibilité des navigateurs
Voir aussi
- Guide des collections indexées
- L'objet global
Array - L'instruction
with - La propriété
Symbol.unscopables - Prothèse d'émulation de
Array.prototype[Symbol.unscopables]danscore-js(angl.)