首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么.join()不能与函数参数一起使用?

为什么.join()不能与函数参数一起使用?
EN

Stack Overflow用户
提问于 2010-01-19 12:46:33
回答 8查看 42.1K关注 0票数 72

为什么这样做(返回“一、二、三”):

代码语言:javascript
复制
var words = ['one', 'two', 'three'];
$("#main").append('<p>' + words.join(", ") + '</p>');

这项工作(返回"the list: 111"):

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

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

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

要对"arguments“变量执行什么操作才能对其使用.join()?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-01-19 12:51:27

它不能工作,因为arguments对象不是一个数组,尽管它看起来像一个数组。它没有join方法:

代码语言:javascript
复制
>>> var d = function() { return '[' + arguments.join(",") + ']'; }
>>> d("a", "b", "c")
TypeError: arguments.join is not a function

要将arguments转换为数组,可以执行以下操作:

代码语言:javascript
复制
var args = Array.prototype.slice.call(arguments);

现在join可以工作了:

代码语言:javascript
复制
>>> var d = function() {
  var args = Array.prototype.slice.call(arguments);
  return '[' + args.join(",") + ']';
}
>>> d("a", "b", "c");
"[a,b,c]"

或者,您可以使用jQuery的,它将尝试将类似arguments的“几乎数组”转换为数组:

代码语言:javascript
复制
var args = $.makeArray(arguments);

下面是 (我最喜欢的这类东西的参考资料)对此的看法:

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

arguments对象仅在函数体中可用。试图在函数声明之外访问arguments对象会导致错误。

票数 94
EN

Stack Overflow用户

发布于 2010-01-19 13:02:24

如果您对其他Array.prototype方法不感兴趣,并且只想使用join,则可以直接调用它,而无需将其转换为数组:

代码语言:javascript
复制
var displayIt = function() {
    return 'the list: ' + Array.prototype.join.call(arguments, ',');
};

此外,您可能会发现知道逗号是默认分隔符很有用,如果您没有定义分隔符,则spec将使用逗号。

票数 22
EN

Stack Overflow用户

发布于 2012-03-30 21:43:33

你可以用我做的这个jQuery .joinObj Extension/Plugin

正如您将在该小提琴中看到的,您可以按如下方式使用它:

代码语言:javascript
复制
$.joinObj(args, ",");

代码语言:javascript
复制
$.(args).joinObj(",");

插件代码:

代码语言:javascript
复制
(function(c){c.joinObj||(c.extend({joinObj:function(a,d){var b="";if("string"===typeof d)for(x in a)switch(typeof a[x]){case "function":break;case "object":var e=c.joinObj(a[x],d);e!=__proto__&&(b+=""!=b?d+e:e);break;default:"selector"!=x&&"context"!=x&&"length"!=x&&"jquery"!=x&&(b+=""!=b?d+a[x]:a[x])}return b}}),c.fn.extend({joinObj:function(a){return"object"===typeof this&&"string"===typeof a?c.joinObj(this,a):c(this)}}))})(jQuery);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2091138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档