为什么 toString() 以两种不同的方式工作?
Why does toString() work in two different ways?
我经常以两种不同的方式使用 toString(),但直到最近我才意识到我不了解正在发生的事情的机制。
例如我用这个函数来return一个对象的类型:
var getType = function (obj) {
return Object.prototype.toString.call(obj).slice(8, -1);
};
getType([1,2,3]) // returns "Array"
但如果我这样做
[1,2,3].toString()
我会得到
"1,2,3"
我认为 call
只是用给定的 this
调用函数,它等于 [1,2,3]
.
同样,我认为执行 [1,2,3].toString()
调用 toString 时也会将 [1,2,3]
作为 this
值。
两种情况都没有参数,this
值相同,有什么不同?
那是因为
Array.prototype.toString !== Object.prototype.toString
例如:
Array.prototype.toString.call([1,2,3]); // "1,2,3"
Object.prototype.toString.call([1,2,3]); // "[object Array]"
我经常以两种不同的方式使用 toString(),但直到最近我才意识到我不了解正在发生的事情的机制。
例如我用这个函数来return一个对象的类型:
var getType = function (obj) {
return Object.prototype.toString.call(obj).slice(8, -1);
};
getType([1,2,3]) // returns "Array"
但如果我这样做
[1,2,3].toString()
我会得到
"1,2,3"
我认为 call
只是用给定的 this
调用函数,它等于 [1,2,3]
.
同样,我认为执行 [1,2,3].toString()
调用 toString 时也会将 [1,2,3]
作为 this
值。
两种情况都没有参数,this
值相同,有什么不同?
那是因为
Array.prototype.toString !== Object.prototype.toString
例如:
Array.prototype.toString.call([1,2,3]); // "1,2,3"
Object.prototype.toString.call([1,2,3]); // "[object Array]"