📜  JavaScript 中 Object.freeze() 和 const 的区别(1)

📅  最后修改于: 2023-12-03 15:31:40.209000             🧑  作者: Mango

JavaScript 中 Object.freeze() 和 const 的区别

在 JavaScript 中,有 Object.freeze() 方法和 const 声明用于创建不可修改的变量和对象。但是,这两种方法的实现和使用方式还是存在严格的区别的。

Object.freeze()

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
Object.freeze() 与 const 的区别
  • Object.freeze() 可以冻结对象,使其不能修改,而 const 不能防止对象属性的修改。
const obj = {name: 'Lucy', age: 18};

// 只是 const 声明变量值不能修改,但是变量的属性还可以修改
obj.age = 20;

console.log(obj); // {name: 'Lucy', age: 20}
  • Object.freeze() 可冻结数组,但是 const 不能冻结数组,数组的内容仍然可以修改。
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 声明是用于表示一个值是不可修改的常量,如下:

const a = 3;

a = 4; // 报错 TypeError: Assignment to constant variable.

console.log(a); // 3
const 与 let 的区别

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
const 和 Object.freeze() 的区别
  • const 声明的变量是不可修改的常量,而 Object.freeze() 冻结的是对象的属性。
  • const 声明的变量不能修改,而 Object.freeze() 还可以 read-only 对象。
总结

Object.freeze() 冻结对象是用于保护一个对象不被修改,常量声明的变量则是保证声明的变量不能被重新赋值,常量的值不能被修改。它们的适用场景是不同的,具体使用时因场景而定。