可变或不变的:了解JavaScript的阴和阳
#javascript #网络开发人员 #教程 #cleancode

作为JavaScript开发人员,了解可突变性和不变性的概念至关重要。这些概念是指对象是否要更改的能力。可突变性意味着可以更改对象,而不变性意味着一旦创建对象就无法更改。

让我们进一步探讨这些概念,看看它们如何影响我们的代码。

可变性

在JavaScript中,默认情况下大多数对象都是可变的。这意味着您可以更改其属性,添加新属性甚至删除属性。例如,考虑以下代码:


let person = {
  name: "John",
  age: 30,
};

person.age = 31;
console.log(person);


在此示例中,我们正在更改人物对象的年龄属性的价值。这是可能的,因为JavaScript中的对象是可变的。

尽管在某些情况下可突出性可能很有用,但它也可能导致意外行为。考虑以下代码:

let arr1 = [1, 2, 3];
let arr2 = arr1;
arr2.push(4);

console.log(arr1); // Output: [1, 2, 3, 4]

在此示例中,我们正在创建两个阵列arr1arr2。然后,我们将arr1分配给arr2,这意味着它们都指的是同一对象。然后,我们向arr2添加了一个新元素,该元素还修改了arr1,因为它们是同一对象。这可能会导致我们的代码中的意外错误。

不变性

另一方面,

不变性意味着一旦创建对象就无法更改。在JavaScript中,诸如字符串和数字之类的原始类型是不可变的。这意味着您一旦创建它们的价值就无法更改其价值。

例如,考虑以下代码:

let str = "Hello";
str[0] = "h";
console.log(str); // Output: "Hello"

在此示例中,我们试图将str变量的第一个字符从“ H”更改为“ H”。但是,由于字符串在JavaScript中是不变的,因此这对str的值没有影响。

不变性在某些情况下可以有用,因为它可以帮助防止对我们的代码的意外更改。例如,考虑以下代码:

let arr1 = [1, 2, 3];
let arr2 = [...arr1, 4];

console.log(arr1); // Output: [1, 2, 3]
console.log(arr2); // Output: [1, 2, 3, 4]

在此示例中,我们通过使用传播操作员(...)来复制arr1的元素并在末尾添加新元素来创建一个新的Array arr2。这会创建一个新的阵列,并使原始的arr1保持不变。

结论

了解可熔性和不可变性的概念对于在JavaScript中编写可靠和无漏洞的代码很重要。虽然在某些情况下可突变性可能很有用,但它也可能导致意外的行为和错误。另一方面,不变性可以帮助防止对我们的代码的意外更改并使其更可靠。