[英]console.log outputs 'function <valueOf result> ' instead of '<valueOf result>'
我正在阅读javascript手册,我有以下代码:
//sum
function sum(arg1) {
var sum = arg1;
function f(arg2) {
sum += arg2;
return f;
};
f.valueOf = function () {
return sum;
};
f.toString = function () {
return sum;
};
return f;
}
我这样执行:
console.log(sum(1)(2)(3)(4));
根据手动console.log
应该输出valueOf
函数的结果
但它输出
function 10
请解释一下这种行为。
根据手动console.log应该输出valueOf函数的结果
我不知道你在说什么“手动”,但一般来说, console.log
不会在你输出的内容上调用valueOf
。 console.log
的实现从JavaScript引擎到JavaScript引擎各不相同,但一般来说,它们会尝试为您提供比调用valueOf
更有用的信息。
如果你想触发valueOf
,你需要有意识地这样做,例如:
console.log(sum(1)(2)(3)(4).valueOf());
// ------------------------^^^^^^^^^^
或(因为您的功能旨在产生一个数字):
console.log(+sum(1)(2)(3)(4));
// ---------^
例:
function sum(arg1) { var sum = arg1; function f(arg2) { sum += arg2; return f; }; f.valueOf = function () { return sum; }; f.toString = function () { return sum; }; return f; } console.log(sum(1)(2)(3)(4).valueOf()); // ------------------------^^^^^^^^^^ console.log(+sum(1)(2)(3)(4)); // ---------^
Look in the actual browser console; the Stack Snippets console doesn't quite do what the real browser console does.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.