为什么toString()以两种不同的方式工作?

时间:2015-06-16 21:53:58

标签: javascript tostring

我经常以两种不同的方式使用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值是相同的,所以有什么不同?

1 个答案:

答案 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]"