在JavaScript中,当你将一个对象的属性值赋给另一个变量时,实际上是将该属性的引用复制给了新的变量,而不是将其值复制一份。所以当你执行 let b = a[‘a’] 时,b 变量实际上引用了 a[‘a’] 数组的内存地址,而不是数组的值本身。
因此,当你通过 b.push(‘2’) 向 b 数组中添加元素时,实际上是修改了原始数组 a[‘a’]。因为 a[‘a’] 和 b 引用了同一个数组对象,所以对 b 的操作也会影响到 a[‘a’]。
要避免改变原始数组,可以使用数组的一些方法来创建一个新的数组,而不是直接引用原始数组的地址。这样做可以确保对新数组的操作不会影响原始数组。以下是几种方法:
使用数组的slice()
方法:
let a = {'a': ['1']};
let b = a['a'].slice(); // 创建原数组的副本
b.push('2'); // 在副本上操作
console.log(a['a']); // ['1']
console.log(b); // ['1', '2']
使用数组的解构赋值:
let a = {'a': ['1']};
let b = [...a['a']]; // 创建原数组的副本
b.push('2'); // 在副本上操作
console.log(a['a']); // ['1']
console.log(b); // ['1', '2']
使用Array.from()
方法:
let a = {'a': ['1']};
let b = Array.from(a['a']); // 创建原数组的副本
b.push('2'); // 在副本上操作
console.log(a['a']); // ['1']
console.log(b); // ['1', '2']
这些方法都可以创建原数组的副本,然后对副本进行操作,而不影响原始数组的值。