Object.freeze() vs const

前端 未结 5 470
感情败类
感情败类 2020-12-12 10:27

Object.freeze() seems like a transitional convenience method to move towards using const in ES6.

Are there cases where both take their place in the cod

5条回答
  •  暖寄归人
    2020-12-12 10:51

    In ES5 Object.freeze doesn't work on primitives, which would probably be more commonly declared using const than objects. You can freeze primitives in ES6, but then you also have support for const.

    On the other hand const used to declare objects doesn't "freeze" them, you just can't redeclare the whole object, but you can modify its keys freely. On the other hand you can redeclare frozen objects.

    Object.freeze is also shallow, so you'd need to recursively apply it on nested objects to protect them.

    var ob1 = {
       foo : 1,
        bar : {
            value : 2   
        }
    };
    Object.freeze( ob1 );
    
    const ob2 = {
       foo : 1,
        bar : {
            value : 2   
        }
    }
    
    ob1.foo = 4;  // (frozen) ob1.foo not modified
    ob2.foo = 4;  // (const) ob2.foo modified
    
    ob1.bar.value = 4;  // (frozen) modified, because ob1.bar is nested
    ob2.bar.value = 4;  // (const) modified
    
    ob1.bar = 4;  // (frozen) not modified, bar is a key of obj1
    ob2.bar = 4;  // (const) modified
    
    ob1 = {};  // (frozen) ob1 redeclared
    ob2 = {}; // (const) ob2 not redeclared
    

提交回复
热议问题