以下是JavaScript中的一个问题:
// Tested via Google Chrome console.
var toString = Object.prototype.toString;
"foo".toString(); // "foo"
toString.call("foo"); // [object String]
[].toString(); // ""
toString.call([]); // [object Array]
{}.toString(); // syntax error
toString.call({}); // [object Object]
为什么toString的结果与toString.call()不同?
已更新
String.prototype.toString.call("foo"); // "foo"
Object.prototype.toString.call("foo"); // [object String]
String.prototype.toString不是来自原型链,如下所示吗?
字符串中的toString [未找到] - > String.prototype中的toString [未找到]
--> toString in Object.prototype[found]
答案 0 :(得分:16)
String.prototype.toString
会覆盖Object.prototype.toString
。它们的功能不同。
来自specification of String.prototype.toString
:
返回此String值。 (注意,对于String对象, toString 方法会返回与 valueOf 方法相同的内容。)
调用 toString 方法时,将执行以下步骤:
- 让 O 成为调用ToObject传递 this 值作为参数的结果。
- 让 class 为 O 的[[Class]]内部属性的值。
- 返回String值,该值是连接三个字符串“ [object ”, class 和“] ”的结果。< / LI> 醇>
数组行为相似,它们也会覆盖toString()
:
> [1,2].toString()
"1,2"
答案 1 :(得分:4)
>>> String.prototype.toString.call("foo")
"foo"
对象与字符串不同。
答案 2 :(得分:-1)
全局toString
函数与object.toString()
函数不同。
根据{{3}},全局toString
函数定义不明确,因此在不同的浏览器中实现得很糟糕。基本上它提供了与typeof
运算符类似的功能。