Object.prototype.toString.call(arrayObj)和arrayObj.toString()之间的区别

时间:2015-05-03 06:39:30

标签: javascript object tostring

我已经阅读了一些材料,并且在语法方面完全掌握了这个概念,如下所示:

textarea.selectionEnd

第2行和第3行有何不同?据我所知,两者都调用toString方法,当前对象被设置为' arrObj'。

2 个答案:

答案 0 :(得分:12)

由于toString中定义了Object.prototype,所以继承Object的任何人都会默认使用toString方法。

但是,Array个对象会覆盖默认的toString方法,以将数组元素打印为逗号分隔的字符串。

Object.prototype.toString不知道它实际处理的对象类型。因此,它有意保持通用,并始终打印对象的实际类型。这就是为什么

console.log(Object.prototype.toString.call(arrObj));

打印

[object Array]

这是传递的对象的类型。但是,当你执行arrObj.toString时,你试图用它的String形式表示数组,因此在toString对象中覆盖Array以将数组元素打印为逗号分隔的字符串。

这就是为什么两个电话都不同。

但是在其他对象的情况下,toString未被覆盖,因此他们将使用toString中的Object.prototype.toString。例如,

var obj = {
    1: 2
};

console.log(obj.toString());
// [object Object]

阅读MDN的Overriding the default toString method

示例

答案 1 :(得分:6)

toStringoverridden for Arrays;和 Object.prototype.toStringArray.prototype.toString不同。

要使用call获得相同的结果,请在“正确”方法上使用它:

 Array.prototype.toString.call(arrObj); // Gives "1,2,3"