Symbol.unscopables
Le symbole connu Symbol.unscopables
est utilisé afin de définir les noms des propriétés propres et héritées qui sont exclues de l'objet lors de l'utilisation de with
sur l'objet en question.
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
Le code source de cet exemple interactif est disponible dans un dépôt GitHub. Si vous souhaitez contribuez à ces exemples, n'hésitez pas à cloner https://github.com/mdn/interactive-examples et à envoyer une pull request !
Description
Le symbole @@unscopables
(Symbol.unscopables
) peut être défini sur n'importe quel objet afin de ne pas exposer certaines propriétés lors des liaisons lexicales avec with
. Note : en mode strict, l'instruction with
n'est pas disponible et ce symbole est donc probablement moins nécessaire.
En définissant une propriété comme true
dans un objet unscopables
, cela exclura la propriété de la portée lexicale. En définissant une propriété comme false
, celle-ci pourra faire partie de la portée lexicale et être manipulée dans un bloc with
.
Attributs de Symbol.unscopables |
|
---|---|
Écrivable | Non |
Énumérable | Non |
Configurable | Non |
Exemples
Le code qui suit fonctionne bien pour ES5 et les versions antérieures. En revanche, pour ECMAScript 2015 (ES6) et les versions ultérieures où la méthode Array.prototype.keys()
existe, lorsqu'on utilise un environnement créé avec with
, "keys"
serait désormais la méthode et non la variable. C'est là que le symbole natif @@unscopables
Array.prototype[@@unscopables]
intervient et empêche d'explorer ces méthodes avec with
.
var keys = [];
with(Array.prototype) {
keys.push("something");
}
Object.keys(Array.prototype[Symbol.unscopables]);
// ["copyWithin", "entries", "fill", "find", "findIndex",
// "includes", "keys", "values"]
On peut également manipuler unscopables
sur ses propres objets :
var obj = {
toto: 1,
truc: 2
};
obj[Symbol.unscopables] = {
toto: false,
truc: true
};
with(obj) {
console.log(toto); // 1
console.log(truc); // ReferenceError: truc is not defined
}
Spécifications
Spécification | État | Commentaires |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) La définition de 'Symbol.unscopables' dans cette spécification. |
Standard | Définition initiale. |
ECMAScript (ECMA-262) La définition de 'Symbol.unscopables' dans cette spécification. |
Standard évolutif |
Compatibilité des navigateurs
BCD tables only load in the browser
Voir aussi
Array.prototype[@@unscopables]
- L'instruction
with
(qui n'est pas disponible en mode strict)