我将从代码开始:
var s = ["hi"];
console.log(s);
s[0] = "bye";
console.log(s);
Run Code Online (Sandbox Code Playgroud)
简单吧?对此,Firebug说:
["hi"]
["bye"]
Run Code Online (Sandbox Code Playgroud)
很棒,但Chrome的JavaScript控制台(7.0.517.41 beta)说:
["bye"]
["bye"]
Run Code Online (Sandbox Code Playgroud)
我做错了什么,或者Chrome的JavaScript控制台在评估我的阵列方面特别懒惰?
我在javascript中有以下片段,其输出让我觉得出错了.
1.
a=2;
console.log(a);
a+=2;
console.log(a);
Run Code Online (Sandbox Code Playgroud)
输出:2 4 ; 正如所料
2.
t=[0,2];
console.log(t);
t[0]+=2;
console.log(t);
Run Code Online (Sandbox Code Playgroud)
产出:[2,2] [2,2]
输出不应该是 ?并且上述两种情况之间的区别是什么导致两种情况都有不同的答案?[0,2] [2,2]
打开Chrome开发者工具并输入:
var a = [];console.log(a);a.push(1);console.log(a);
你会期望这会输出类似的东西
[]
[1]
Run Code Online (Sandbox Code Playgroud)
但相反,它输出
[1]
[1]
Run Code Online (Sandbox Code Playgroud)
行为是相同的
var a = [];console.log(a);a[0] = 1;console.log(a);
谁能解释这种行为?
在OS X上运行Chrome.在32位Windows 7上运行相同的行为.
编辑:无论语句是否在同一行,行为都是相同的.我只是将它们放在一行上,以便于测试.
把
var a = [];
console.log(a);
a.push(1);
console.log(a);
Run Code Online (Sandbox Code Playgroud)
在一个文件然后运行它会产生相同的行为.
编辑x 2如果您不想制作要测试的文件, 请参阅:http://jsfiddle.net/9N4A6/.
我尝试以下代码:
var myList = new Object();
var item = new Object();
item.text = "item-1";
myList[3] = item;
console.log(myList);
console.log(myList[3].text);
// Assign another object to the same entry
var item2 = new Object();
item2.text = "item-2";
myList[3] = item2;
console.log(myList);
console.log(myList[3].text);
Run Code Online (Sandbox Code Playgroud)
结果很奇怪:
* Object
* 3: Object
text: "item-2"
item-1
* Object
* 3: Object
text: "item-2"
item-2
Run Code Online (Sandbox Code Playgroud)
但是 - 如果我在一段时间后执行第二部分(使用setTimeout),并展开第一个对象,我说得对,即:
* Object
* 3: Object
text: "item-1"
item-1
* Object
* 3: Object
text: "item-2"
item-2
Run Code Online (Sandbox Code Playgroud)
我发现分享它很重要,因为我认为可以浪费大量时间来试图理解他的代码中的错误.如果有人提到一个开放的bug或其他东西 - …
javascript console firefox google-chrome javascript-debugger