JavaScript - isFrozen() method

revision:


Category : object

The Object.isFrozen() static method determines if an object is frozen.

Syntax :

        Object.isFrozen(obj)
    

Parameters:

obj : required. The object which should be checked.

Examples:

        const object1 = {
            property1: 42
        };
        console.log(Object.isFrozen(object1));
          // Expected output: false
        Object.freeze(object1);
        console.log(Object.isFrozen(object1));
          // Expected output: true
    

Practical examples

example: using Object.isFrozen() method.

code:
                    <div>
                        <p id="frozen-1"></p>
                        <p id="frozen-2"></p>
                        <p id="frozen-3"></p>
                        <p id="frozen-4"></p>
                        <p id="frozen-5"></p>
                        <p id="frozen-6"></p>
                        <p id="frozen-7"></p>
                        <p id="frozen-8"></p>
                        <p id="frozen-9"></p>
                        <p id="frozen-10"></p>
                        <p id="frozen-11"></p>
                        <p id="frozen-12"></p>
                    </div>
                    <script>
                        // A new object is extensible, so it is not frozen.
                        Object.isFrozen({}); // false
                        document.getElementById("frozen-1").innerHTML = "is frozen ? : " +  Object.isFrozen({});
                        // An empty object which is not extensible is vacuously frozen.
                        const vacuouslyFrozen = Object.preventExtensions({});
                        Object.isFrozen(vacuouslyFrozen); // true
                        document.getElementById("frozen-2").innerHTML = "is frozen ? : " +  Object.isFrozen(vacuouslyFrozen);
                        // A new object with one property is also extensible, ergo not frozen.
                        const oneProp = { p: 42 };
                        Object.isFrozen(oneProp); // false
                        document.getElementById("frozen-3").innerHTML = "is frozen ? : " +  Object.isFrozen(oneProp);
                        // Preventing extensions to the object still doesn't make it frozen, because the property is still configurable (and writable).
                        Object.preventExtensions(oneProp);
                        Object.isFrozen(oneProp); // false
                        document.getElementById("frozen-3").innerHTML = "is frozen ? : " +  Object.isFrozen(oneProp);
                        // Deleting that property makes the object vacuously frozen.
                        delete oneProp.p;
                        Object.isFrozen(oneProp); // true
                        document.getElementById("frozen-4").innerHTML = "is frozen ? : " +  Object.isFrozen(oneProp);
                        // A non-extensible object with a non-writable but still configurable property is not frozen.
                        const nonWritable = { e: "plep" };
                        Object.preventExtensions(nonWritable);
                        Object.defineProperty(nonWritable, "e", {
                        writable: false,
                        }); // make non-writable
                        Object.isFrozen(nonWritable); // false
                        document.getElementById("frozen-5").innerHTML = "is frozen ? : " +  Object.isFrozen(nonWritable);
                        // Changing that property to non-configurable then makes the object frozen.
                        Object.defineProperty(nonWritable, "e", {
                        configurable: false,
                        }); // make non-configurable
                        Object.isFrozen(nonWritable); // true
                        document.getElementById("frozen-6").innerHTML = "is frozen ? : " +  Object.isFrozen(nonWritable);
                        // A non-extensible object with a non-configurable but still writable property also isn't frozen.
                        const nonConfigurable = { release: "the kraken!" };
                        Object.preventExtensions(nonConfigurable);
                        Object.defineProperty(nonConfigurable, "release", {
                        configurable: false,
                        });
                        Object.isFrozen(nonConfigurable); // false
                        document.getElementById("frozen-7").innerHTML = "is frozen ? : " +  Object.isFrozen(nonConfigurable);
                        // Changing that property to non-writable then makes the object frozen.
                        Object.defineProperty(nonConfigurable, "release", {
                        writable: false,
                        });
                        Object.isFrozen(nonConfigurable); // true
                        document.getElementById("frozen-8").innerHTML = "is frozen ? : " +  Object.isFrozen(nonConfigurable);
                        // A non-extensible object with a configurable accessor property isn't frozen.
                        const accessor = {
                            get food() {
                                return "yum";
                            },
                        };
                        Object.preventExtensions(accessor);
                        Object.isFrozen(accessor); // false
                        document.getElementById("frozen-9").innerHTML = "is frozen ? : " +  Object.isFrozen(accessor);
                        // When we make that property non-configurable it becomes frozen.
                        Object.defineProperty(accessor, "food", {
                        configurable: false,
                        });
                        Object.isFrozen(accessor); // true
                        document.getElementById("frozen-10").innerHTML = "is frozen ? : " +  Object.isFrozen(accessor);
                        // But the easiest way for an object to be frozen is if Object.freeze has been called on it.
                        const frozen = { 1: 81 };
                        Object.isFrozen(frozen); // false
                        Object.freeze(frozen);
                        Object.isFrozen(frozen); // true
                        document.getElementById("frozen-11").innerHTML = "is frozen ? : " +  Object.isFrozen(frozen);
                        // By definition, a frozen object is non-extensible.
                        Object.isExtensible(frozen); // false
                        // Also by definition, a frozen object is sealed.
                        Object.isSealed(frozen); // true
                        document.getElementById("frozen-12").innerHTML = "is frozen ? : " +  Object.isSealed(frozen);
                    </script>