我先从代码开始:var s = [\'hi\'];console.log(s);s[0] = \'bye\';console.log(s);很简单,对吧?响应此代码,Firefox 控制台显示:[ \'hi\' ][ “...
我将从代码开始:
var s = ["hi"];
console.log(s);
s[0] = "bye";
console.log(s);
很简单,对吧?Firefox 控制台响应此消息并显示:
[ "hi" ]
[ "bye" ]
太棒了,但是 Chrome 的 JavaScript 控制台(7.0.517.41 beta)显示:
[ "bye" ]
[ "bye" ]
是我做错了什么吗,还是 Chrome 的 JavaScript 控制台在评估我的数组时特别懒惰?
看起来 Chrome 正在其 \'预编译' 阶段用 实际数组的 指针
解决方法之一是克隆数组,然后记录新副本:
var s = ["hi"];
console.log(CloneArray(s));
s[0] = "bye";
console.log(CloneArray(s));
function CloneArray(array)
{
var clone = new Array();
for (var i = 0; i < array.length; i++)
clone[clone.length] = array[i];
return clone;
}