Object.isFrozen()
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since иÑÐ»Ñ 2015 г..
Сводка
ÐеÑод Object.isFrozen() опÑеделÑеÑ, бÑл ли обÑÐµÐºÑ Ð·Ð°Ð¼Ð¾Ñожен.
СинÑакÑиÑ
Object.isFrozen(obj)
ÐаÑамеÑÑÑ
obj-
ÐÑовеÑÑемÑй обÑекÑ.
ÐпиÑание
ÐбÑÐµÐºÑ ÑвлÑеÑÑÑ Ð·Ð°Ð¼Ð¾ÑоженнÑм ÑолÑко в Ñом ÑлÑÑае, еÑли он не ÑаÑÑиÑÑем, вÑе его ÑвойÑÑва ÑвлÑÑÑÑÑ Ð½Ðµ наÑÑÑаиваемÑми и вÑе его ÑвойÑÑва даннÑÑ (Ñо еÑÑÑ Ñакие, коÑоÑÑе не ÑвлÑÑÑÑÑ ÑвойÑÑвами доÑÑÑпа Ñ ÑÑнкÑиÑми ÑеÑÑеÑа или геÑÑеÑа) ÑвлÑÑÑÑÑ Ð½Ðµ запиÑÑваемÑми.
ÐÑимеÑÑ
// ÐовÑй обÑÐµÐºÑ ÑвлÑеÑÑÑ ÑаÑÑиÑÑемÑм, Ñак ÑÑо он не замоÑожен.
assert(Object.isFrozen({}) === false);
// ÐÑÑÑой не ÑаÑÑиÑÑемÑй обÑÐµÐºÑ Ð¿Ð¾ опÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ Ð·Ð°Ð¼Ð¾Ñожен.
var vacuouslyFrozen = Object.preventExtensions({});
assert(Object.isFrozen(vacuouslyFrozen) === true);
// ÐовÑй обÑÐµÐºÑ Ñ Ð¾Ð´Ð½Ð¸Ð¼ ÑвойÑÑвом ÑвлÑеÑÑÑ ÑаÑÑиÑÑемÑм, поÑÑÐ¾Ð¼Ñ Ð¾Ð½ не замоÑожен.
var oneProp = { p: 42 };
assert(Object.isFrozen(oneProp) === false);
// ÐÑедоÑвÑаÑение ÑаÑÑиÑÐµÐ½Ð¸Ñ Ð¾Ð±ÑекÑа вÑÑ ÐµÑÑ Ð½Ðµ Ð´ÐµÐ»Ð°ÐµÑ ÐµÐ³Ð¾ замоÑоженнÑм,
// поÑколÑÐºÑ ÑвойÑÑво вÑÑ ÐµÑÑ Ð¾ÑÑаÑÑÑÑ Ð½Ð°ÑÑÑаиваемÑм (и запиÑÑваемÑм).
Object.preventExtensions(oneProp);
assert(Object.isFrozen(oneProp) === false);
// ...но пÑи Ñдалении ÑÑого ÑвойÑÑва обÑÐµÐºÑ ÑÑановиÑÑÑ Ð·Ð°Ð¼Ð¾ÑоженнÑм по опÑеделениÑ.
delete oneProp.p;
assert(Object.isFrozen(oneProp) === true);
// Ðе ÑаÑÑиÑÑемÑй обÑÐµÐºÑ Ñ Ð½Ðµ запиÑÑваемÑм, но вÑÑ ÐµÑÑ Ð½Ð°ÑÑÑаиваемÑм ÑвойÑÑвом, не ÑвлÑеÑÑÑ Ð·Ð°Ð¼Ð¾ÑоженнÑм.
var nonWritable = { e: "plep" };
Object.preventExtensions(nonWritable);
Object.defineProperty(nonWritable, "e", { writable: false }); // делаем ÑвойÑÑво не запиÑÑваемÑм
assert(Object.isFrozen(nonWritable) === false);
// Ðзменение ÑвойÑÑва на не наÑÑÑаиваемое Ð´ÐµÐ»Ð°ÐµÑ Ð¾Ð±ÑÐµÐºÑ Ð·Ð°Ð¼Ð¾ÑоженнÑм.
Object.defineProperty(nonWritable, "e", { configurable: false }); // делаем ÑвойÑÑво не наÑÑÑаиваемÑм
assert(Object.isFrozen(nonWritable) === true);
// Ðе ÑаÑÑиÑÑемÑй обÑÐµÐºÑ Ñ Ð½Ðµ наÑÑÑаиваемÑм, но вÑÑ ÐµÑÑ Ð·Ð°Ð¿Ð¸ÑÑваемÑм ÑвойÑÑвом, Ñакже не ÑвлÑеÑÑÑ Ð·Ð°Ð¼Ð¾ÑоженнÑм.
var nonConfigurable = { release: "кÑакен!" };
Object.preventExtensions(nonConfigurable);
Object.defineProperty(nonConfigurable, "release", { configurable: false });
assert(Object.isFrozen(nonConfigurable) === false);
// Ðзменение ÑвойÑÑва на не запиÑÑваемое Ð´ÐµÐ»Ð°ÐµÑ Ð¾Ð±ÑÐµÐºÑ Ð·Ð°Ð¼Ð¾ÑоженнÑм.
Object.defineProperty(nonConfigurable, "release", { writable: false });
assert(Object.isFrozen(nonConfigurable) === true);
// Ðе ÑаÑÑиÑÑемÑй обÑÐµÐºÑ Ñ Ð½Ð°ÑÑÑаиваемÑм ÑвойÑÑвом доÑÑÑпа не ÑвлÑеÑÑÑ Ð·Ð°Ð¼Ð¾ÑоженнÑм.
var accessor = {
get food() {
return "нÑм";
},
};
Object.preventExtensions(accessor);
assert(Object.isFrozen(accessor) === false);
// ...но Ñделав ÑÑо ÑвойÑÑво не наÑÑÑаиваемÑм, обÑÐµÐºÑ ÑÑановиÑÑÑ Ð·Ð°Ð¼Ð¾ÑоженнÑм.
Object.defineProperty(accessor, "food", { configurable: false });
assert(Object.isFrozen(accessor) === true);
// СамÑм же пÑоÑÑÑм ÑпоÑобом замоÑозиÑÑ Ð¾Ð±ÑÐµÐºÑ Ð¼Ð¾Ð¶Ð½Ð¾ ÑеÑез вÑзов на нÑм меÑода Object.freeze.
var frozen = { 1: 81 };
assert(Object.isFrozen(frozen) === false);
Object.freeze(frozen);
assert(Object.isFrozen(frozen) === true);
// Ðо опÑеделениÑ, замоÑоженнÑй обÑÐµÐºÑ ÑвлÑеÑÑÑ Ð½Ðµ ÑаÑÑиÑÑемÑм.
assert(Object.isExtensible(frozen) === false);
// Также, по опÑеделениÑ, замоÑоженнÑй обÑÐµÐºÑ ÑвлÑеÑÑÑ Ð·Ð°Ð¿ÐµÑаÑаннÑм.
assert(Object.isSealed(frozen) === true);
ÐÑимеÑаниÑ
Ð ES5, еÑли аÑгÑÐ¼ÐµÐ½Ñ Ð¼ÐµÑода не ÑвлÑеÑÑÑ Ð¾Ð±ÑекÑом (ÑвлÑеÑÑÑ Ð¿ÑимиÑивнÑм знаÑением), бÑÐ´ÐµÑ Ð²ÑбÑоÑено иÑклÑÑение TypeError. Ð ES6 Ñакой аÑгÑÐ¼ÐµÐ½Ñ Ð±ÑÐ´ÐµÑ ÑаÑÑмаÑÑиваÑÑÑÑ, как пÑоÑÑой замоÑоженнÑй обÑÐµÐºÑ Ð¸ меÑод пÑоÑÑо веÑнÑÑ true.
> Object.isFrozen(1)
TypeError: 1 is not an object // код ES5
> Object.isFrozen(1)
true // код ES6
СпеÑиÑикаÑии
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.isfrozen> |