Symbol.unscopables
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2015.
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)