为什么这样做(返回“一,二,三”):
var words = ['one', 'two', 'three'];
$("#main").append('<p>' + words.join(", ") + '</p>');
而这个工作(返回“列表: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()?
9条答案
按热度按时间5jvtdoz21#
它不起作用,因为
arguments
对象不是数组,尽管它看起来像数组。它没有join
方法:要将
arguments
转换为数组,可以执行以下操作:现在
join
可以工作了:或者,您可以使用jQuery的**
makeArray
**,它将尝试将“almost-arrays”(如arguments
)转换为数组:以下是**Mozilla reference**(我最喜欢的这类资源)对此的看法:
arguments
对象不是数组。它类似于数组,但除了length
之外没有任何数组属性。例如,它没有pop方法。...arguments
对象只能在函数体中使用。试图在函数声明之外访问arguments对象将导致错误。7bsow1i62#
如果你对其他
Array.prototype
方法不感兴趣,而只是想使用join
,你可以直接调用它,而不需要将它转换为数组:另外,你可能会发现知道逗号是默认分隔符是有用的,如果你没有定义分隔符,根据规范,逗号将被使用。
zpqajqem3#
你可以用我做的这个jQuery .joinObj Extension/Plugin。
正如你将在小提琴中看到的,你可以如下使用它:
或
插件代码:
20jt8wwn4#
只需使用jQuery实用函数
makeArray
arguments
不是Array,而是一个对象。但是,由于它是“类似数组”的,你可以调用jQuery实用函数makeArray
来使它工作:它将输出:
ejk8hzay5#
目前你不能连接数组参数,因为它们不是数组,如下所示
所以你要么先把它们变成这样的数组
或者像这样再短一点
如果你使用的是babel或者兼容的浏览器来使用es6的特性,你也可以使用rest参数。
这会让你做更酷的事情,比如
lvjbypge6#
你可以使用typeof来看看这里发生了什么:
这里你可以看到typeof在两种情况下都返回“object”,但是只有一个对象定义了连接函数。
cbwuti447#
我不知道是否有一种简单的方法可以将参数转换为数组,但你可以尝试这样做:
hgqdbh6s8#
arguments
不是jQuery对象,只是一个普通的JavaScript对象。在尝试调用.join()
之前扩展它。我想你会写:(我对jQuery不太熟悉,只熟悉Prototype,所以我希望这不是完全虚假的。
编辑:错了!但在他的回应中,道格·内纳描述了我试图实现的目标。
x3naxklr9#
您也可以使用
Array.from
,然后使用join()
与您想要的任何令牌: