Object.isFrozen()
O método Object.isFrozen()
determina se um objeto está frozen.
Experimente
Sintaxe
Object.isFrozen(obj)
Parameters
obj
-
O objeto que será verificado.
Return value
Um valor Boolean
indicando se o objeto está frozen.
Descrição
Um objeto estará frozen se, e apenas se, ele não for extensible, todas as suas propriedades não são configuráveis e todas suas propriedades de dados (propriedades que não são asessores de propriedades com getters ou setters) não podem ser modificadas.
Examples
// Um novo objeto é extensível, então ele não está frozen.
Object.isFrozen({}); // === false
// Um objeto vazio que não é extensível
// é vagamente frozen.
var vacuouslyFrozen = Object.preventExtensions({});
Object.isFrozen(vacuouslyFrozen); // === true
// Um novo objeto com uma propriedade também é extensível,
// portanto não está frozen.
var oneProp = { p: 42 };
Object.isFrozen(oneProp); // === false
// Impedir extensões do objeto ainda
// não o torna frozen, pois a propriedade ainda será
// configurável (e modificável).
Object.preventExtensions(oneProp);
Object.isFrozen(oneProp); // === false
// ...Porém, deletando a propriedade o objeto se tornará
// vagamente frozen.
delete oneProp.p;
Object.isFrozen(oneProp); // === true
// Um objeto não extensível e não modificável,
// mas com uma propriedade configurável não será frozen.
var nonWritable = { e: "plep" };
Object.preventExtensions(nonWritable);
Object.defineProperty(nonWritable, "e", {
writable: false,
}); // tornar não modificável
Object.isFrozen(nonWritable); // === false
// Alterando a propriedade para não configurável
// tornará o objeto frozen.
Object.defineProperty(nonWritable, "e", {
configurable: false,
}); // make non-configurable
Object.isFrozen(nonWritable); // === true
// Um objeto não extensível com uma propriedade não configurável
// mas modificável não será frozen.
var nonConfigurable = { release: "the kraken!" };
Object.preventExtensions(nonConfigurable);
Object.defineProperty(nonConfigurable, "release", {
configurable: false,
});
Object.isFrozen(nonConfigurable); // === false
// Alterando a propriedade para não modificável
// tornará o objeto frozen.
Object.defineProperty(nonConfigurable, "release", {
writable: false,
});
Object.isFrozen(nonConfigurable); // === true
// Um objeto não extensível com um assessor de propriedade
// configurável não será frozen.
var accessor = {
get food() {
return "yum";
},
};
Object.preventExtensions(accessor);
Object.isFrozen(accessor); // === false
// ...Mas alterando essa propriedade para não configurável
// o objeto se tornará frozen.
Object.defineProperty(accessor, "food", {
configurable: false,
});
Object.isFrozen(accessor); // === true
// A forma mais fácil para um objeto ser frozen
// é se o método Object.freeze foi usado nele.
var frozen = { 1: 81 };
Object.isFrozen(frozen); // === false
Object.freeze(frozen);
Object.isFrozen(frozen); // === true
// Por definição, um objeto frozen não é extensível.
Object.isExtensible(frozen); // === false
// Também por definição, um objeto frozen estará sealed.
Object.isSealed(frozen); // === true
Notas
No ES5, se o argumento deste método não for um objeot (uma primitiva), ele irá lançar um TypeError
. No ES2015, um argumento que não é objeto será sempre tratado como se fosse um objeto frozen, simplesmente retornando true
.
Object.isFrozen(1);
// TypeError: 1 is not an object (ES5 code)
Object.isFrozen(1);
// true (ES2015 code)
Especificações
Specification |
---|
ECMAScript Language Specification # sec-object.isfrozen |
Compatibilidade com navegadores
BCD tables only load in the browser