代码之家  ›  专栏  ›  技术社区  ›  nick zoum

你能覆盖JavaScript对象的真实强制吗?

  •  4
  • nick zoum  · 技术社区  · 6 年前

    string 可以使用 toString

    这个 number valueOf 功能。

    这个 boolean 也可以使用 功能。

    var foo = {
      toString: function() {
        console.log("To String");
        return "bar";
      },
      valueOf: function() {
        console.log("Value Of");
        return 5;
      }
    };
    
    console.log(`${foo}`);
    console.log(+foo);
    console.log(foo == true);
    console.log(!!foo);

    我还没有找到一个函数,当一个对象需要转换为 truthy . 自从 x == true !!x 如果你有不同的行为,那么我猜没有任何函数可以改变它。相反,我尝试扩展 真实的 false 但唯一被接受的价值是 Object.create null 它几乎与对象文字相同(没有 Object.prototype 属性)。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Felix Kling    6 年前

    foo == true foo 一个数字,这就是为什么 valueOf 工作,但它是误导。
    You can try {} == true here 查看执行了比较算法的哪些步骤(免责声明:这是我做的)。

    !foo 然而呼吁 ToBoolean true 对于一个对象。没有办法推翻这种行为。

    enter image description here