为什么这个函数调用返回一个字符串而不是一个数字
Why this function invocation return a string and not a number
我想在一个对象中存储一个函数和它的参数,并通过这个对象调用它,如下所示:
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 ?非常感谢!
尝试使用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将使用所提供的数组作为参数调用该函数。
将一个数组作为单个参数传递给函数
var fn = function(x,y) {return x + y };
你的呼叫看起来像fn([2, 3])
所以在运行时,x
等于数组,y
等于undefined
。你什么也没通过。
[2, 3] + undefined
被求值为字符串,因为[2, 3]
的标量值是2,3
。string + undefined
表达式也将第二个操作数强制转换为string,因此2,3undefined
。
要"修复"它-使用Function.prototype.apply
:
fn.apply(null, [2, 3])
或者
console.log(obj.func.apply(null, obj['args']));
引用:
- Function.prototype.apply
- 加法运算符-运行时语义:求值
相关文章:
- 递增一个数字而不去掉前导零
- 制作一个regex来验证只有一个数字的字符串
- 如何使用至少一个数字、一个大写字母和6-20个字符验证密码
- 有没有办法在里面看到一个数字'的64位浮点IEEE754表示
- 我如何解析二's是一个数字的补码字符串
- 为什么我需要在这里输入var,为什么它会给我一个数字作为答案?(Javascript)
- 为什么 JavaScript 如果一个数字有一个前导零,就将其视为八进制
- 增加一个数字并将其附加到函数
- 如何让计算机猜测一个数字并返回猜测次数(Javascript)
- 正则表达式删除最后一个数字之后的字符串
- 用户在文本框中输入一个数字,并根据使用 PHP 输入的数字重定向到另一个网页
- 每次使用 Javascript 加载页面时增加一个数字(变量)的简单方法
- Javascript Regexp :如果一个字母与一个数字相邻,请添加下划线
- jQuery UI Slider ui.value 获取最后一个数字
- JavaScript 使用多少位来表示一个数字
- Javascript提示和警报输入一个数字,它将循环,您将输入数字以获得它的平均值
- RXJS 为什么只有最后一个数字同时有 a 和 b
- 检查字符串是否等于一个单词和一个数字
- 对负指数调用的.toFixed()返回一个数字,而不是字符串
- 脚本每天添加相同的数字,月底再添加一个数字