我经常以两种不同的方式使用toString(),但直到最近我才意识到我不理解发生了什么的机制。
例如,我使用此函数返回对象的类型:
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
值是相同的,所以有什么不同?
答案 0 :(得分:6)
那是因为
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]"