console.log输出'function <valueof result =“”>'而不是'<valueof result =“”>'

时间:2016-11-24 08:37:46

标签: javascript function google-chrome console

我正在阅读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

请解释一下这种行为。

1 个答案:

答案 0 :(得分:3)

  

根据手册console.log应该输出valueOf函数的结果

我不知道&#34;手册&#34;您正在谈论,但总的来说,console.log 并没有在您输出的内容上调用valueOfconsole.log的实现从JavaScript引擎到JavaScript引擎各不相同,但总的来说,它们会尝试为您提供比调用valueOf更有用的信息。

如果您想触发valueOf,您需要有意识地执行此操作,例如:

console.log(sum(1)(2)(3)(4).valueOf());
// ------------------------^^^^^^^^^^

或(因为您的功能旨在产生一个数字):

console.log(+sum(1)(2)(3)(4));
// ---------^

示例:

&#13;
&#13;
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));
// ---------^
&#13;
Look in the actual browser console; the Stack Snippets console doesn't quite do what the real browser console does.
&#13;
&#13;
&#13;