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