JavaScript中出现意外的[call]函数行为(在使用Chrome的控制台中)

时间:2012-02-07 01:51:18

标签: javascript google-chrome

所以这是我的代码:

function A(){
  var args = Array.prototype.slice.call(arguments);
  console.log('before unshift: ', args);
  args.unshift(3);
  console.log('after unshift:', args);
}

现在,当我打电话时:

A(1, 2, 3)

控制台中的结果是:

  在取消之前

:[3,1,2,3]   不合时之后:[3,1,2,3]

“在取消之前”应该[1,2,3]虽然......?

......任何人都知道为什么?

---------- 使用:Chrome的开发人员工具 ----------

2 个答案:

答案 0 :(得分:1)

控制台,至少在WebKit的Web Inspector中,输出数组的“实时”视图,而不是日志发生时的快照。

要获得其中之一,请执行

console.log('before unshift: ', args.slice());

对于对象(可能包含数组)的情况,这是WebKit bug #35801

答案 1 :(得分:0)

我认为这是一个错误。以下更明显。




    var a = {b:1};
     console.log(a);
     a.b=2;

日志中的结果是{b:2}。它应该是{b:1}。

数组也是对象。所以它也犯了错误。

但原始值类型并没有包含这个错误。

希望它有所帮助。