为什么这样做(返回“一、二、三”):
var words = ['one', 'two', 'three'];
$("#main").append('<p>' + words.join(", ") + '</p>');
这项工作(返回"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>');
要对"arguments“变量执行什么操作才能对其使用.join()?
发布于 2010-01-19 12:51:27
它不能工作,因为arguments
对象不是一个数组,尽管它看起来像一个数组。它没有join
方法:
>>> var d = function() { return '[' + arguments.join(",") + ']'; }
>>> d("a", "b", "c")
TypeError: arguments.join is not a function
要将arguments
转换为数组,可以执行以下操作:
var args = Array.prototype.slice.call(arguments);
现在join
可以工作了:
>>> var d = function() {
var args = Array.prototype.slice.call(arguments);
return '[' + args.join(",") + ']';
}
>>> d("a", "b", "c");
"[a,b,c]"
或者,您可以使用jQuery的,它将尝试将类似arguments
的“几乎数组”转换为数组:
var args = $.makeArray(arguments);
下面是 (我最喜欢的这类东西的参考资料)对此的看法:
arguments
对象不是数组。它类似于数组,但除了length
之外没有任何数组属性。例如,它没有pop方法。..。
arguments
对象仅在函数体中可用。试图在函数声明之外访问arguments对象会导致错误。
发布于 2010-01-19 13:02:24
如果您对其他Array.prototype
方法不感兴趣,并且只想使用join
,则可以直接调用它,而无需将其转换为数组:
var displayIt = function() {
return 'the list: ' + Array.prototype.join.call(arguments, ',');
};
此外,您可能会发现知道逗号是默认分隔符很有用,如果您没有定义分隔符,则spec将使用逗号。
发布于 2012-03-30 21:43:33
你可以用我做的这个jQuery .joinObj Extension/Plugin。
正如您将在该小提琴中看到的,您可以按如下方式使用它:
$.joinObj(args, ",");
或
$.(args).joinObj(",");
插件代码:
(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);
https://stackoverflow.com/questions/2091138
复制相似问题