【问题标题】:console.log outputs 'function <valueOf result> ' instead of '<valueOf result>'console.log 输出 'function <valueOf result>' 而不是 '<valueOf result>'
【发布时间】:2016-11-24 08:37:46
【问题描述】:

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

请解释这种行为。

【问题讨论】:

  • 你的意思是输出中的函数这个词吗?它可能是控制台的行为。
  • @Nina Scholz 是的,我很关心这种行为
  • but it output function 10 - 不在我的浏览器中

标签: javascript function google-chrome console


【解决方案1】:

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

我不知道你在说什么“手册”,但总的来说,console.log不会在你输出的内容上调用valueOfconsole.log 的实现因 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.

【讨论】:

  • with + all 工作正常,但我不确定我可以返回哪个对象来获得这种行为
  • 您是从哪里想到在它的开头添加一个 + 号的?你能链接它或解释一下。谢谢:D
  • @Semi-Friends + 表示转换为数字
  • @gstackoverflow:对不起,我不知道您所说的 是什么意思“但我不确定我可以返回哪个对象来获得这种行为”
猜你喜欢
  • 1970-01-01
  • 2014-07-13
  • 2022-12-02
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-06
  • 2011-02-27
相关资源
最近更新 更多