Dal toString
è definito in Object.prototype
, chi eredita Object
, sarà di default ottenere il metodo toString
.
Tuttavia, gli oggetti Array
sostituiscono il metodo predefinito toString
per stampare gli elementi dell'array come stringa separata da virgole.
Object.prototype.toString
non sa quale tipo di oggetto effettivamente gestisce. Quindi, è intenzionalmente mantenuto generico e stampa sempre il tipo effettivo dell'oggetto. Questo è il motivo
console.log(Object.prototype.toString.call(arrObj));
stampe
[object Array]
che è il tipo di oggetto passato. Tuttavia, quando si esegue arrObj.toString
, si sta tentando di rappresentare l'array nella sua forma String, quindi toString
è sovrascritto negli oggetti Array
per stampare gli elementi dell'array come stringa separata da virgole.
Ecco perché entrambe le chiamate sono diverse.
Ma in caso di altri oggetti, il toString
non è sovrascritto, in modo che useranno il toString
dal Object.prototype.toString
.Ad esempio,
var obj = {
1: 2
};
console.log(obj.toString());
// [object Object]
Leggi l'esempio del MDN di Overriding the default toString
method
Questo perché si sta utilizzando il prototipo 'Object'. Sta usando l'array come un oggetto. È necessario utilizzare 'Array.prototype.toString()' – Downgoat
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain – undefined
Si noti che [Object.prototype.toString()] (https: //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/toString) restituisce sempre '" [tipo oggetto] "', dove * tipo * è una sorta di tipo nativo dell'oggetto – gengkev