Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 阵列拼接和控制台.log_Javascript - Fatal编程技术网

Javascript 阵列拼接和控制台.log

Javascript 阵列拼接和控制台.log,javascript,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);

当我在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);
请参见以下代码:


当您在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(","));

如果你真的想看更多的话,你可以在上面展开。

有趣。当我尝试这个时,Chrome告诉我第一个数组有3个对象,但只显示2个…是的,我也知道。我看到的一切都表明console.log是同步的,所以我不明白。@MorganLane-这是Chrome在记录数组时对数组的字符串表示,从理论上讲,存储在内存中比存储整个对象便宜。只有在控制台中展开对象时,您才会看到差异(因为它是对myTabs数组的最后一次引用)。谢谢!事实上,这并不是我对日志功能的期望。从资源的角度来看,它是有意义的。如果Chrome开发者选择在每次记录对象时记录对象的一个副本,这取决于对象的大小,那么浏览器可能会在几秒钟内崩溃。在我看来,这是内存管理的明智选择。那么,什么是更好的调试工具呢?我只使用console.log进行调试。请尝试使用实际的调试器(“源”选项卡)。在代码中设置断点,当调试器暂停时,您可以在右窗格的“范围”部分查看实际内容。由于上述原因,console.log不是最好的调试工具,但在某些情况下它可能会有所帮助。