Why does this work (returns "one, two, three"):

var words = ['one', 'two', 'three'];
$("#main").append('<p>' + words.join(", ") + '</p>');

and this work (returns "the list: 111"):

var displayIt = function() {
    return 'the list: ' + arguments[0];
}   
$("#main").append('<p>' + displayIt('111', '222', '333') + '</p>');

但不是这个(返回空白):

var displayIt = function() {
    return 'the list: ' + arguments.join(",");
}   
$("#main").append('<p>' + displayIt('111', '222', '333') + '</p>');

What do I have to do to my "arguments" variable to be to use .join() on it?

推荐答案

It doesn't work because the arguments object is not an array, although it looks like it. It has no join method:

>>> var d = function() { return '[' + arguments.join(",") + ']'; }
>>> d("a", "b", "c")
TypeError: arguments.join is not a function

To convert arguments to an array, you can do:

var args = Array.prototype.slice.call(arguments);

Now join will work:

>>> var d = function() {
  var args = Array.prototype.slice.call(arguments);
  return '[' + args.join(",") + ']';
}
>>> d("a", "b", "c");
"[a,b,c]"

Alternatively, you can use jQuery's makeArray, which will try to turn "almost-arrays" like arguments into arrays:

var args = $.makeArray(arguments);

下面是100(我最喜欢的这类资源)对此的看法:

arguments对象不是数组. 它类似于数组,但是 没有任何数组属性,除了 length.例如,它没有 POP方法....

arguments对象仅可用

Jquery相关问答推荐

如何在jQuery中判断粘贴剪贴板中字母输入的增加/减少

如何在外部JS文件中使用带有参数的laravel路由

如何在 Angular 4 中使用 jQuery 插件?

确定ajax调用是否由于不安全的响应或连接被拒绝而失败

在页面加载之间保持变量

catch forEach 最后一次迭代

用于活动选项卡更改的 Bootstrap 3 jquery 事件

如何滚动到AngularJS中的页面顶部?

如何签入用户已在 Google recaptcha 中选中复选框的 js?

请求的资源错误中不存在“Access-Control-Allow-Origin”标头

如何禁用在div内单击

如何正确卸载/销毁 VIDEO 元素

试图将 jquery 加载到 Tampermonkey 脚本中

Bootstrap datepicker 选择后隐藏

具有动态大小图像的马赛克网格画廊

如何获取 jQuery 下拉值 onchange 事件

Bootstrap:在 Modal 中打开另一个 Modal

jQuery - 使用发布数据重定向

在 Bootstrap 3 中向工具提示添加换行符

等效于 C# LINQ Select 的 Javascript