最小例子:
function test() {
console.log(arguments.join(','));
}
test(1,2,3);
然后我得到:
TypeError:undefined不是函数
然而,当我为数组做同样的事情时:
console.log([1,2,3].join(','));
我得到了
“1,2,3”
正如所料。
古董有什么问题?它假设是一个数组:
(function () {
console.log(typeof [] == typeof arguments)
})();
真
答案 0 :(得分:6)
参数不是数组。
(function(){
console.log(typeof arguments);
})();
// 'object'
它是一个类似于数组的结构,具有长度和数字属性,但它实际上不是数组。如果你愿意,你可以在它上面使用数组函数。
function test() {
console.log(Array.prototype.join.call(arguments, ','));
// OR make a new array from its values.
var args = Array.prototype.slice.call(arguments);
console.log(args.join(','));
}
test(1,2,3);
注意,您的示例有效,因为array
不是类型。 typeof [] === 'object'
也是。但是,您可以使用
Array.isArray(arguments) // false
Array.isArray([]) // true
答案 1 :(得分:0)
问题是arguments
本身不是javascript数组。它在某些方面表现得像一个数组,但在其他方面却没有。
为什么不尝试将其转换为纯javascript数组。这可以通过以下方式完成:
(function () {
var args = Array.prototype.slice.call(arguments, 0);
console.log(typeof [] === typeof args);
}());