以下是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]
Run Code Online (Sandbox Code Playgroud)
为什么toString的结果与toString.call()不同?
更新
String.prototype.toString.call("foo"); // "foo"
Object.prototype.toString.call("foo"); // [object String]
Run Code Online (Sandbox Code Playgroud)
String.prototype.toString不是来自原型链,如下所示?
字符串中的toString [未找到] - > String.prototype中的toString [未找到]
Run Code Online (Sandbox Code Playgroud)--> toString in Object.prototype[found]
Fel*_*ing 17
String.prototype.toString覆盖Object.prototype.toString.它们的功能不同.
返回此String值.(注意,对于String对象,toString方法碰巧返回与valueOf方法相同的东西.)
当的toString方法被调用,则采取以下步骤:
- 设O是调用ToObject传递此值作为参数的结果.
- 设class为O的[[Class]]内部属性的值.
- 返回String值,该值是连接三个字符串" [object ",class和" ] "的结果.
数组行为相似,它们也会覆盖toString():
> [1,2].toString()
"1,2"
Run Code Online (Sandbox Code Playgroud)