注意:这不是使用arr.slice(0)
修复此“问题”的常见数组副本“问题”的数百万重复之一
也就是说,我想了解为什么会得到这个意想不到的结果:
var oldArr = [[1,2],[3,4]];
var find = oldArr[1];
var newArr = oldArr.slice(0);
console.log(newArr.indexOf(find)); //1?
//proof that newArr is NOT referenced to oldArr
newArr[0] = "Hi";
newArr[1] = "How are you?";
console.log(oldArr+" "+newArr); //"1,2,3,4 Hi,How are you?"
如果您替换find
为以下任何替代方案,它会返回预期的-1
:
[3,4]
直接使用- 使用可变持有
[3,4]
- 使用引用另一个数组的变量
[3,4]
我找不到任何解释为什么最后三种方法与第一个示例之间有任何区别。据我所知,应该没有。
有任何想法吗?