array splice和console.log

时间:2018-01-16 16:12:05

标签: javascript

当我在javascript中对数组执行操作时,console.log将数组显示为在对数组执行操作之前已经更改。我可以在chrome和firefox中重现这个。有谁知道这是为什么?

var myTabs = [[0,0,0],
              [0,0,0],
              [0,0,0],
              [0,0,0]];
console.log(myTabs);
myTabs[0].splice(1, 1);
console.log(myTabs);

请参阅此代码:

https://jsfiddle.net/mxrh33t0/1/

1 个答案:

答案 0 :(得分:7)

在Chrome中展开已记录的对象时,您正在扩展对它的最后一个引用,该对象在记录时的副本。

在您的情况下,最后一个引用是在调用splice()方法之后的数组。如果您想验证差异,则需要更具体地记录日志:

var myTabs = [[0,0,0],
              [0,0,0],
              [0,0,0],
              [0,0,0]];
console.log(myTabs[0].join(","));
myTabs[0].splice(1, 1);
console.log(myTabs[0].join(","));

如果您真的想看到更多内容,可以进行扩展。