Can't .join()函数参数- TypeError: undefined不是函数
Can't .join() function arguments - TypeError: undefined is not a function
最小示例:
function test() {
console.log(arguments.join(','));
}
test(1,2,3);
得到:
TypeError: undefined is not a function
然而,当我对数组做同样的操作时:
console.log([1,2,3].join(','));
我"1、2、3"
。
论证有什么问题?它应该是一个数组:
(function () {
console.log(typeof [] == typeof arguments)
})();
真正
Arguments不是数组。
(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
问题是arguments
本身不是javascript数组。它在某些方面表现得像一个数组,但在其他方面却不是。
你为什么不把它转换成一个纯javascript数组呢?这可以通过以下方式完成:
(function () {
var args = Array.prototype.slice.call(arguments, 0);
console.log(typeof [] === typeof args);
}());
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- AngularJS:我可以跳过函数参数回调吗
- 为什么不'我们在javascript中使用函数参数的数据类型
- 使用闭包共享构造函数参数
- 函数参数的值错误
- 当一个重要的构造函数参数丢失时应该发生什么
- 阻止ReSharper将JavaScript函数参数放到新行中
- 根据函数参数将CSS值存储在var中,然后对其进行操作
- 使构造函数参数具有ES6类方法的特权
- 当客户端将两个按钮的javascript函数参数修改为相同时,SQL/PHP会更新多行
- Windows.Networking.EndpointPair构造函数参数
- 是否可以使用Sinon.JS检查函数参数绑定是否正确
- 大括号中的Javascript函数参数
- jQuery 无法使用 AJAX 调用访问函数内部的函数参数
- 将JSON字符串转换为函数参数
- eval()读取函数参数有多糟糕
- Javascript不能在一个命令中使用函数参数
- 函数参数在内部不可见,返回新的Promise(函数(resolve,reject).传递给被promise化的函数的
- ES6类构造函数参数
- 是否可以在javascript函数参数列表中调用多个函数