【问题标题】:Overriden toString() is not called for Object of type Number [duplicate]没有为 Number 类型的对象调用覆盖 toString() [重复]
【发布时间】:2018-10-02 20:34:24
【问题描述】:

为什么在 console.log("" + x) 中没有自动调用 toString()? “警报”功能也是如此。我在很多地方读到,这些函数使用对象的 toString() 方法自动将对象转换为字符串。

Number.prototype.toString = function ()
{
  return "Hello!";
};

x = new Number(42);

console.log("" + x);
console.log("" + x.toString());

在问这个问题之前,我花了大约两个小时寻找答案。我看到了这个链接Why does Boolean primitive not call prototype toString()?。这是类似的东西,但它仍然没有回答我的问题。非常感谢您提供清晰的解释。

【问题讨论】:

  • 是的,现在我明白这里的原因是串联。谢谢你。因为如果我调用 alert(x) 它会弹出“Hello”。但是如果我调用 alert(""+x) 它会弹出 "42"。

标签: javascript types tostring


【解决方案1】:

您可以更改valueOf 方法并将其用于获取原始值。

Number.prototype.valueOf = function () {
    return "Hello!";
};

var x = new Number(42);

console.log("" + x);
console.log("" + x.toString());

【讨论】:

    猜你喜欢
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    相关资源
    最近更新 更多