--- title: Symbol.unscopables slug: Web/JavaScript/Reference/Global_Objects/Symbol/unscopables translation_of: Web/JavaScript/Reference/Global_Objects/Symbol/unscopables ---
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.
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.
{{js_property_attributes(0,0,0)}}
O seguinte código funciona normalmente no ES5 e anteriores. Entretanto, no ECMAScript 2015 e superiores, o método {{jsxref("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 {{jsxref("Array.@@unscopables", "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"]
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ção |
---|
{{SpecName('ESDraft', '#sec-symbol.unscopables', 'Symbol.unscopables')}} |
{{Compat("javascript.builtins.Symbol.unscopables")}}
with
statement (not available in Strict mode)