Od toString
jest zdefiniowany w Object.prototype
, kto dziedziczy Object
będzie domyślnie dostać metodę toString
.
Ale, Array
obiektów, nadpisuje domyślną metodę toString
, aby wydrukować elementy tablicy jako ciąg rozdzielany przecinkami.
Object.prototype.toString
nie wie, z jakim typem obiektu faktycznie się zajmuje. Tak więc jest celowo utrzymywany w stanie ogólnym i zawsze drukuje rzeczywisty typ obiektu. Dlatego
console.log(Object.prototype.toString.call(arrObj));
drukuje
[object Array]
który jest typem obiektu przekazany. Ale kiedy robisz arrObj.toString
, próbujesz reprezentować tablicę w jej formie String, więc toString
jest nadpisywane w obiektach Array
, aby wydrukować elementy tablicy jako łańcuch oddzielany przecinkami.
Dlatego oba połączenia są różne.
Ale w przypadku innych obiektów, poszczególnych toString
nie jest nadpisane, więc będą używać toString
z Object.prototype.toString
.Na przykład,
var obj = {
1: 2
};
console.log(obj.toString());
// [object Object]
Czytaj przykład w MDN dotyczącą Overriding the default toString
method
to dlatego, że używasz 'prototyp Object'. Używa tablicy jako obiektu. Musisz użyć 'Array.prototype.toString()' – Downgoat
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain – undefined
Zwróć uwagę, że [Object.prototype.toString()] (https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString) zawsze zwraca '" [typ obiektu] "', gdzie * typ * jest rodzajem natywnego typu obiektu – gengkev