Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.
Symbol.unscopables
El símbolo conocido comoSymbol.unscopables se utiliza para especificar un valor de objeto cuyos nombres de propiedades propias y heredadas se excluyen de los enlaces de entornowith del objeto asociado.
In this article
Pruébalo
const object1 = { property1: 42,};object1[Symbol.unscopables] = { property1: true,};with (object1) { console.log(property1); // Expected output: Error: property1 is not defined}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 entornowith. Tenga en cuenta que si utilizaModo estricto, las declaracioneswith no están disponibles y probablemente tampoco necesiten este símbolo.
Establecer una propiedad atrue en un objetounscopable la haráunscopable y por tanto no aparecerá en las variables de ámbito léxico. Establecer una propiedad afalse la haráscopable y por lo tanto aparecerá en las variables de ámbito léxico.
Atributos de la propiedadSymbol.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étodoArray.prototype.keys(). Eso significa que dentro del entornowith "keys" sería ahora el método y no la variable. Fue entonces cuando se introdujo el símbolounscopable. Un ajuste incorporado deunscopables se implementa comoArray.prototype[@@unscopables] para evitar que algunos de los métodos de Array se encuentren dentro de la declaraciónwith.
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 establecerunscopables 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® 2026 Language Specification> # sec-symbol.unscopables> |
Compatibilidad con navegadores
Véase también
Array.prototype[@@unscopables]- Sentencia
with(no disponible enStrict mode)