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.
O símbolo Symbol.unscopables
é usado para específicar um valor objeto cujo os nomes de propriedade próprio e herdados são excluídos das associações do ambiente with
o objeto associado.
Experimente
Descrição
O @@unscopables
símbolo (Symbol.unscopables
) pode ser definido em qualquer objeto para impedir que os nomes da propriedade sejam expostos como variavéis lexicais with
ligações de ambiente. Note que se usar o Strict mode, with
as declarações não estão disponíveis e provavelmente não haverá necessidade desse símbolo.
Configurando a propriedade para true
em um objeto unscopables
tornará ele não unscopable e portanto não irá apareer nas variavéis de escopo lexicais. Configurando uma propriedade para false
o tornará scopable
e portanto irá aparecer no escopo de variavéis lexicais.
Property attributes of Symbol.unscopables | |
---|---|
Writable | no |
Enumerable | no |
Configurable | no |
Exemplos
Escopo com declarações
O seguinte código funciona normalmente no ES5 e anteriores. Entretanto, no ECMAScript 2015 e superiores, o método Array.prototype.keys()
foi introduzido. Isso significa que dentro do ambiente with
"chaves" seria agora o método e não as variavéis. Isso qunado os símbolos unscopable
s foram introduzidos. Uma confiração built-in unscopables
é implementada como Array.prototype[@@unscopables]
para prevenir que alguns métodos de Array tenham escopo definido na desclaração with
.
var keys = [];
with (Array.prototype) {
keys.push("something");
}
Object.keys(Array.prototype[Symbol.unscopables]);
// ["copyWithin", "entries", "fill", "find", "findIndex",
// "includes", "keys", "values"]
Objetos não escopáveis
Você também pode configurar unscopables
para seu próprio objeot.
var 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
}
Especificações
Specification |
---|
ECMAScript Language Specification # sec-symbol.unscopables |
Compatibilidade com navegadores
BCD tables only load in the browser
Veja também
Array.prototype[@@unscopables]
with
statement (not available in Strict mode)