Javascript功能评估

时间:2013-10-01 11:39:50

标签: javascript

我将函数声明为:

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

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

"2*-----*Bob"

但是当我声明数组如:

a = [2, "Bob"]

将这些参数注入这样的函数:

test(a.join(','))

我明白了:

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

这不是我想要的。为什么会这样解释?如何从我拥有的数组中输出"2*-----*Bob"

6 个答案:

答案 0 :(得分:3)

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

test(a[0], a[1]);

答案 1 :(得分:3)

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

有关详情,请阅读The Mozilla Docs for Function.apply

答案 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没有编写和递归评估自己!你期望:

  1. a.join()返回一个字符串并将其写入源代码。
  2. 读取并执行生成的源代码。
  3. 它实际运作的方式:

    1. 读取并执行源代码。
    2. 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',第二个参数是实际的值数组。