📅  最后修改于: 2023-12-03 15:31:40.209000             🧑  作者: Mango
在 JavaScript 中,有 Object.freeze() 方法和 const 声明用于创建不可修改的变量和对象。但是,这两种方法的实现和使用方式还是存在严格的区别的。
Object.freeze() 方法可以冻结一个对象,使其不能添加、删除或修改属性,该方法返回被冻结对象本身。冻结对象后,对象的属性值不可修改,但是可以读取。
const obj = {name: 'Lucy', age: 18};
Object.freeze(obj);
obj.age = 20; // 不生效,因为 obj 已被冻结
console.log(obj); // {name: 'Lucy', age: 18}
可以添加 Object.isFrozen() 方法判断一个对象是否已被冻结。
console.log(Object.isFrozen(obj)); // true
const obj = {name: 'Lucy', age: 18};
// 只是 const 声明变量值不能修改,但是变量的属性还可以修改
obj.age = 20;
console.log(obj); // {name: 'Lucy', age: 20}
const arr = [1, 2, 3];
Object.freeze(arr);
arr[0] = 4; // 不生效, 因为 arr 已被冻结
console.log(arr); // [1, 2, 3]
const arr2 = [4, 5, 6];
arr2[0] = 1;
console.log(arr2); // [1, 5, 6],const 只能保证数组变量不能被重新赋值,但是不能冻结数组元素
const 声明是用于表示一个值是不可修改的常量,如下:
const a = 3;
a = 4; // 报错 TypeError: Assignment to constant variable.
console.log(a); // 3
const 声明的变量值是不可修改的常量,而 let 声明的变量是可以修改的。如下:
const a = 3;
a = 4; // 报错 TypeError: Assignment to constant variable.
let b = 5;
b = 6;
console.log(a); // 3
console.log(b); // 6
Object.freeze() 冻结对象是用于保护一个对象不被修改,常量声明的变量则是保证声明的变量不能被重新赋值,常量的值不能被修改。它们的适用场景是不同的,具体使用时因场景而定。