Symbol.unscopables
El símbolo conocido como Symbol.unscopables
se utiliza para especificar un valor de objeto cuyos nombres de propiedades propias y heredadas se excluyen de los enlaces de entorno with
del objeto asociado.
Pruébalo
Descripción
El símbolo @@unscopables
(Symbol.unscopables
) puede definirse en cualquier objeto para excluir los nombres de propiedades de ser expuestos como variables léxicas en los enlaces de entorno with
. Tenga en cuenta que si utiliza Modo estricto, las declaraciones with
no están disponibles y probablemente tampoco necesiten este símbolo.
Establecer una propiedad a true
en un objeto unscopable
la hará unscopable y por tanto no aparecerá en las variables de ámbito léxico. Establecer una propiedad a false
la hará scopable
y por lo tanto aparecerá en las variables de ámbito léxico.
Atributos de la propiedad Symbol.unscopables | |
---|---|
Sobrescribir | No |
Numerable | No |
Configurable | No |
Ejemplos
Scoping con sentencias
El siguiente código funciona bien en ES5 y posteriores. Sin embargo, en ECMAScript 2015 y posteriores, se introdujo el método Array.prototype.keys()
. Eso significa que dentro del entorno with
"keys" sería ahora el método y no la variable. Fue entonces cuando se introdujo el símbolo unscopable
. Un ajuste incorporado de unscopables
se implementa como Array.prototype[@@unscopables]
para evitar que algunos de los métodos de Array se encuentren dentro de la declaración with
.
const keys = [];
with (Array.prototype) {
keys.push("something");
}
Object.keys(Array.prototype[Symbol.unscopables]);
// ["copyWithin", "entries", "fill", "find", "findIndex",
// "includes", "keys", "values"]
Unscopables en objetos
También puede establecer unscopables
para sus propios objetos.
const obj = {
foo: 1,
bar: 2,
};
obj[Symbol.unscopables] = {
foo: false,
bar: true,
};
with (obj) {
console.log(foo); // 1
console.log(bar); // ReferenceError: bar is not defined
}
Especificaciones
Specification |
---|
ECMAScript Language Specification # sec-symbol.unscopables |
Compatibilidad con navegadores
BCD tables only load in the browser
Véase también
Array.prototype[@@unscopables]
- Sentencia
with
(no disponible en Strict mode)