var keys = [7925181,"68113227"];
var vals = {"7925181":["68113227"],"68113227":["7925181"]};
var temp = [];
for (var i = 0; i < keys.length; i++) {
temp[keys[i]] = vals[keys[i]];
}
//alert(JSON.stringify(vals).length);
alert(JSON.stringify(temp).length);
当我在Chrome中运行该脚本时,我会在很长一段时间后获得340666156的输出。
我的问题是......怎么样?
注释掉的警报输出47.在我看来,第二次警报应该产生相同的结果?那个温度应该是val的精确副本吗?
它的jsfiddle:
哦 - 如果你想破坏你的浏览器窗口(好吧它崩溃了我的谷歌浏览器窗口),只需添加以下内容:
temp.forEach(function(entry) {
alert(temp);
});
有什么想法吗?
答案 0 :(得分:11)
var keys = [7925181,"68113227"];
var vals = {"7925181":["68113227"],"68113227":["7925181"]};
var temp = {}; // <--- !!!
for (var i = 0; i < keys.length; i++) {
temp[keys[i]] = vals[keys[i]];
}
//alert(JSON.stringify(vals).length);
alert(JSON.stringify(temp).length);
http://jsfiddle.net/zerkms/vMMd2/2/
您正在创建一个稀疏数组,并且可能V8使用一些垃圾 null 未定义的值初始化所有间隙(感谢nnnnnn检查) 。这需要一些时间
答案 1 :(得分:7)
@zerkms,是对的。但我也想指出为什么会这样。
> var temp = [];
> temp[10] = 'test';
> temp
[ , , , , , , , , , , 'test' ]
如您所见,它会创建9个未定义的值。我使用nodejs运行上面的内容,因此没有显示空值。
如果我做了JSON.stringfy(),你会看到:
> JSON.stringify(temp)
'[null,null,null,null,null,null,null,null,null,null,"test"]'