请检查以下内容...
var arr = [["test", 1], ["test", 3], ["test", 5]]
var otherArr = arr.slice(0) //should be a new array with a copy of arr
当我评估arr === otherArr
时,结果是FALSE。
当我执行以下操作时,尝试更改第一个数组值:
otherArr[0][1] = otherArr[0][1] + 5;
它还会更改原始数组(arr)
arr[0][1] === otherArr[0][1]
的计算结果为TRUE
但arr === otherArr
的计算结果为FALSE
请帮助我理解这一点,以避免它。
发布于 2018-08-30 04:48:13
这是因为数组是与slice()
不同的对象
arr === otherArr // false (different objects)
但是存储在数组中的值是相同的对象
arr[0][1] === otherArr[0][1]
如果您不想要此行为,则需要对数组执行deep copy
操作,而不是切片。
以下是与数组相关的deep copy
的一些信息:https://www.cs.utexas.edu/~scottm/cs307/handouts/deepCopying.htm
https://stackoverflow.com/questions/52085758
复制相似问题