我认为这是一个旧的 Javascript 行为(Crockford 说这是一个设计错误),在函数内部arguments
就像一个数组,除了它不是一个真正的数组,所以不能在它上面调用数组方法:
function foo() { console.log(arguments.slice(1)) } // won't work
foo(1,2,3);
而且我只是在最新的 Firefox 和 Chrome 上尝试过,但两者都无法正常工作。所以我们可能不得不使用
function foo() { console.log(Array.prototype.slice.call(arguments, 1)) }
foo(1,2,3);
但是为什么不在arguments
现代 JavaScript 中创建一个真正的数组呢?可能不应该有任何依赖于arguments
不是真正数组的程序?现在不把它变成一个真正的数组的原因可能是什么?
我能想到的一个原因是,如果程序员开始将其视为数组,那么代码将无法在旧版浏览器中运行,但 ECMA-5 中的其他内容也无法在旧版浏览器中运行。