📜  不可变对象 javascript (1)

📅  最后修改于: 2023-12-03 14:48:49.920000             🧑  作者: Mango

不可变对象 JavaScript

在 JavaScript 中,所有简单值(如数字、字符串和布尔值)都是不可变的。这意味着它们在创建后不能更改,如果我们尝试修改它们,实际上是创建了一个新值而不是修改原始值。然而,当我们使用对象时,情况就有所不同。对象是可变的,它们的属性可以被修改。但是,有时我们可能想要创建不可变的对象以确保安全性, 保证 JSON 使用的匹配性,以及进行性能优化。如何创建不可变对象呢?

使用 const 创建不可变对象

ES6 中引入了 const 关键字,用于声明常量。使用它来声明对象则会使整个对象变为不可变对象。例如:

const person = {
  name: 'Tom',
  age: 25,
  city: 'New York'
};

person.age = 30; // 不可行 

在上面的代码中,我们创建了一个 person 对象,并声明为常量。我们尝试更新年龄值,但会得到一个 TypeError: Assignment to constant variable. 异常。这是因为 person 是常量,它的值不能改变。

使用 Object.freeze() 方法创建不可变对象

另一种方法是使用 Object.freeze() 方法。这个方法接收一个对象作为参数,并将对象变为不可变的,这意味着对象的属性无法更改。例如:

const person = Object.freeze({
  name: 'Tom',
  age: 25,
  city: 'New York'
});

person.age = 30; // 不可行

在上面的代码中,我们创建了一个 person 对象,并使用 Object.freeze() 方法使其变为不可变的。我们尝试更新年龄值,但仍然会得到一个 TypeError: Cannot assign to read only property 'age' of object. 异常。这是因为 person 对象已被冻结,它的属性无法更改。

结论

创建不可变对象可以确保代码的安全性、保证 JSON 使用的匹配性,以及作为性能优化的一种方法。在 JavaScript 中,我们可以使用 constObject.freeze() 方法来创建不可变对象。但要注意的是,只有对象的第一层会被冻结,嵌套对象将不会被冻结,需要使用递归来冻结嵌套的对象。