Javascript Object.prototype.toString.call(arrayObj)和arrayObj.toString()之间的差异

Javascript Object.prototype.toString.call(arrayObj)和arrayObj.toString()之间的差异,javascript,object,tostring,Javascript,Object,Tostring,我已经阅读了一些材料,但在语法方面还没有完全掌握这个概念,例如: var arrObj = [1,2,3]; Object.prototype.toString.call(arrObj); //Gives "[object Array]" arrObj.toString(); // Gives "1,2,3" 第2行和第3行有何不同?据我所知,在当前对象设置为“arrObj”的情况下,两者都调用toString方法。toStringis;及 Object.prototype.toString与

我已经阅读了一些材料,但在语法方面还没有完全掌握这个概念,例如:

var arrObj = [1,2,3];
Object.prototype.toString.call(arrObj); //Gives "[object Array]"
arrObj.toString(); // Gives "1,2,3"
第2行和第3行有何不同?据我所知,在当前对象设置为“arrObj”的情况下,两者都调用toString方法。

toString
is;及
Object.prototype.toString
Array.prototype.toString
不同

要使用
调用获得相同的结果
,请使用“正确”方法:

 Array.prototype.toString.call(arrObj); // Gives "1,2,3"
toString
is;及
Object.prototype.toString
Array.prototype.toString
不同

要使用
调用获得相同的结果
,请使用“正确”方法:

 Array.prototype.toString.call(arrObj); // Gives "1,2,3"
这些
.call()。例如,节点列表,作为带有
Array.prototype.forEach
的数组。当您将其作为对象调用时,它将“转换”为对象字符串

Array.prototype.toString.call(arrObj);
工作完美
Object.toString()
处理起来有点奇怪想象编译器执行以下操作:

[1, 2, 3] -> { 0: 1, 1: 2, 2: 3 }
function myFunction (input) {
    window[input.constructor.name].prototype.toString.call(input);
}
这些
.call()。例如,节点列表,作为带有
Array.prototype.forEach
的数组。当您将其作为对象调用时,它将“转换”为对象字符串

Array.prototype.toString.call(arrObj);
工作完美
Object.toString()
处理起来有点奇怪想象编译器执行以下操作:

[1, 2, 3] -> { 0: 1, 1: 2, 2: 3 }
function myFunction (input) {
    window[input.constructor.name].prototype.toString.call(input);
}

由于
toString
是在
Object.prototype
中定义的,因此继承
Object
的人将默认获得
toString
方法

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

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

console.log(Object.prototype.toString.call(arrObj));
印刷品

[对象数组]
这是传递的对象的类型。但是,当您执行
arrObj.toString
时,您试图以字符串形式表示数组,因此
toString
array
对象中被重写,以将数组元素打印为逗号分隔的字符串

这就是为什么两个电话都不一样


但对于其他对象,不会覆盖
toString
,因此它们将使用
Object.prototype.toString
中的
toString
。比如说,

var obj = {
    1: 2
};

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


请阅读MDN的示例,因为
toString
是在
对象中定义的。prototype
,任何继承
对象的人默认将获得
toString
方法

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

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

console.log(Object.prototype.toString.call(arrObj));
印刷品

[对象数组]
这是传递的对象的类型。但是,当您执行
arrObj.toString
时,您试图以字符串形式表示数组,因此
toString
array
对象中被重写,以将数组元素打印为逗号分隔的字符串

这就是为什么两个电话都不一样


但对于其他对象,不会覆盖
toString
,因此它们将使用
Object.prototype.toString
中的
toString
。比如说,

var obj = {
    1: 2
};

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


阅读MDN的

示例,这是因为您使用的是
对象
原型。它将数组用作对象。您需要使用
Array.prototype.toString()
注意,它总是返回
“[对象类型]”
,其中类型是对象的某种本机类型。另请参见,这是因为您使用的是
对象
prototype。它将数组用作对象。您需要使用
Array.prototype.toString()
注意,始终返回
“[对象类型]”
,其中类型是对象的某种本机类型请参见