我将函数声明为:
function test(id, name) {
return id + "*-----*" + name
}
所以,当我这样做test(2,"Bob")
时,我得到了这个:
"2*-----*Bob"
但是当我声明数组如:
a = [2, "Bob"]
将这些参数注入这样的函数:
test(a.join(','))
我明白了:
"2,Bob*-----*undefined"
这不是我想要的。为什么会这样解释?如何从我拥有的数组中输出"2*-----*Bob"
答案 0 :(得分:3)
a.join(',')
将连接数组,从而生成类似"2,Bob
"的字符串。您必须单独传递两个变量,例如:
test(a[0], a[1]);
答案 1 :(得分:3)
test.apply(null,a)
会将数组a
发送给函数,并使数组元素成为函数参数。也就是说,[0]将是第一个函数参数,[1]将是第二个参数,依此类推,但您的函数只有两个参数。
答案 2 :(得分:0)
a.join(',')
为您提供了一个字符串,因此您使用一个字符串(test
)调用函数"2,Bob"
,第二个参数为undefined
如果要允许数组作为参数,可以这样做:
function test(id, name) {
if (id.length > 1)
return id[0] + "*-----*" + id[1]
else
return id + "*-----*" + name
}
答案 3 :(得分:0)
我认为你只将一个参数传递给需要两个参数的函数
尝试
test(a.join(','), "foo");
答案 4 :(得分:0)
test(a.join(','))
这会将一个参数传递给函数,该函数中包含一个逗号。对于test(x)
的任何值,x
始终只会将一个参数传递给函数。
你希望它像你写test(2,"Bob")
一样工作,但是Javascript没有编写和递归评估自己!你期望:
a.join()
返回一个字符串并将其写入源代码。它实际运作的方式:
a.join()
返回一个值,用作test()
的输入。答案 5 :(得分:0)
要将数组中打包的参数传递给您需要的函数apply()
function test(id, name) {
return id + "*-----*" + name
}
var a = [2, "Bob"];
var result = test.apply(null, a); // See below
alert(result);
apply
的第一个参数将在函数内变为'this',第二个参数是实际的值数组。