-1

我将函数声明为:

function test(id, name) { 
  return id + "*-----*" + name
}

所以当我这样做时,test(2,"Bob")我得到了这个:

"2*-----*Bob"

但是当我声明数组时,例如:

a = [2, "Bob"]

并将这些参数注入到这样的函数中:

test(a.join(','))

我明白了:

"2,Bob*-----*undefined"

这不是我想要的。为什么会被这样解读?我怎样才能让它"2*-----*Bob"从我拥有的数组中输出

4

6 回答 6

3

test.apply(null,a)将数组发送a给函数并使数组元素成为函数参数。也就是说,a[0] 将是第一个函数参数,a[1] 将是第二个参数,依此类推,但您的函数只有两个参数。

有关这方面的更多信息,请阅读The Mozilla Docs for Function.apply

于 2013-10-01T11:46:43.357 回答
3

a.join(',')将连接数组,生成类似"2,Bob“的字符串。您必须单独传递两个变量,例如:

test(a[0], a[1]);
于 2013-10-01T11:43:07.007 回答
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”,第二个参数是实际的值数组。

于 2013-10-01T11:47:38.340 回答
0
test(a.join(','))

这会将一个参数传递给函数,即一个带有逗号的字符串。test(x)将始终只将一个参数传递给函数,对于x.

你希望它像你写的一样工作test(2,"Bob"),但是 Javascript 不是在写和递归地评估自己!您期望:

  1. a.join()返回一个字符串并将其写入源代码。
  2. 读取并执行生成的源代码。

它的实际工作方式:

  1. 源代码被读取并执行。
  2. a.join()返回一个值,该值用作 的输入test()
于 2013-10-01T11:43:54.203 回答
0

a.join(',')给你一个字符串,所以你test用一个字符串("2,Bob")调用你的函数,第二个参数是undefined

如果你想允许一个数组作为参数,你可以这样做:

function test(id, name) { 
    if (id.length > 1)
        return id[0] + "*-----*" + id[1]
    else
        return id + "*-----*" + name
}
于 2013-10-01T11:42:28.613 回答
0

我认为您只将一个参数传递给需要两个参数的函数

尝试

test(a.join(','), "foo");
于 2013-10-01T11:43:09.023 回答