toString() 在 javascript 中如何工作?

How does toString() work in javascript?

"J" + { toString: function() { return "S"; } }; // "JS"

为什么输出是"JS?"

当我这样做时:

 "J" + { someFoo: function() { return "S"; } }; // "J[object Object]"

为什么这不是 "JS"?

我想弄清楚 .toString() 是如何在第一个块中使用的。

谢谢

toString是一个特殊的函数(在对象的原型中),当需要对象的字符串化模式时调用它。

在您的例子中,加法运算符调用对象的 toString 方法。 From the specs:

  1. If Type(lprim) is String or Type(rprim) is String, then

    a. Return the String that is the result of concatenating ToString(lprim) followed by ToString(rprim).

但是,您可以覆盖此本机方法,您已在第一个代码段中完成*。加法运算符只是调用自定义方法,它会产生您得到的结果。

在后面的代码片段中 toString 只是 returns 对象的默认值。

你可以在很多情况下看到这种情况,例如 alert({}) 从对象的原型调用内部 toString 方法,因为 alert 需要一个字符串作为参数。

(* 更准确:您没有重写本机 属性,而是为具有相同名称的对象创建了一个自己的 属性,它被用来代替从原型链中搜索原生 属性。