为什么此函数调用返回字符串而不是数字

时间:2016-09-06 00:57:51

标签: javascript

我想将一个函数及其参数存储在一个对象中,并通过该对象调用它,如下所示:



var fn = function(x, y) {
  return x + y
};
var obj = {
  'args': [2, 3],
  'func': fn
};
console.log(obj.func(obj['args']));




为什么此代码返回字符串"2,3undefined"?它甚至没有' 23'如果它以字符串形式接收参数,+将它们连接起来。如何按预期返回5?非常感谢!

2 个答案:

答案 0 :(得分:3)

尝试使用apply来调用该函数:

var fn = function(x,y) {return x + y };
var obj = { 'args': [2, 3], 'func' : fn};
console.log(obj.func.apply(obj, obj['args']));

在您的示例中,您实际执行的操作是将整个数组作为“x”参数和未定义的y值传递。 Apply将使用提供的数组作为参数调用该函数。

答案 1 :(得分:1)

您将数组作为单个参数传递给函数

var fn = function(x,y) {return x + y };

您的通话看起来像fn([2, 3])

因此在运行时,x等于数组,y等于undefined。你没有通过任何事情。

[2, 3] + undefined

被计算为字符串,因为[2, 3]的标量值为2,3。并且string + undefined表达式也将第二个操作数转换为字符串,因此2,3undefined

要“修复”它 - 请使用Function.prototype.apply

fn.apply(null, [2, 3])

或在你的情况下

console.log(obj.func.apply(null, obj['args']));

参考文献: