Object.freeze() vs const
2022-08-30 01:34:48
Object.freeze()
似乎是一种过渡性的便利方法,可以在 ES6 中使用。const
是否存在两者在代码中占据一席之地的情况,或者是否有一种首选方法来处理不可变数据?
我应该使用Object.freeze()
直到我使用的所有浏览器都支持然后切换到使用吗?const
const
Object.freeze()
似乎是一种过渡性的便利方法,可以在 ES6 中使用。const
是否存在两者在代码中占据一席之地的情况,或者是否有一种首选方法来处理不可变数据?
我应该使用Object.freeze()
直到我使用的所有浏览器都支持然后切换到使用吗?const
const
const
是两个完全不同的东西。Object.freeze
const
适用于绑定(“变量”)。它创建一个不可变的绑定,即您无法为绑定分配新值。
Object.freeze
适用于值,更具体地说,适用于对象值。它使对象不可变,即您无法更改其属性。
在ES5中,基元不起作用,基元可能比对象更常用。您可以在 ES6 中冻结基元,但同时也可以支持 。Object.freeze
const
const
另一方面,用于声明对象不会“冻结”它们,您只是无法重新声明整个对象,但您可以自由修改其键。另一方面,您可以重新声明冻结的对象。const
Object.freeze
也很浅,因此您需要在嵌套对象上递归地应用它来保护它们。
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