API Console non è un'API standard che è definito in qualsiasi specifica, ma è qualcosa che viene implementato su tutti i browser, quindi i fornitori sono di solito liberi di implementare nel loro modo in quanto non ci sono specifiche standard per definire l'output di alcun metodo in API.
A meno che non si verifichi l'effettiva implementazione dell'API di console per un particolare browser, non si può mai essere sicuri. C'è un tracker su GitHub che elenca le differenze tra l'implementazione dai principali browser.
Se si guarda l'implementazione in FF (disponibile here - cercare log), ha un commento qui sotto
Una linea più in stringa di un oggetto, progettato per l'utilizzo da parte dell'uomo
L'implementazione effettiva verifica il tipo di argomento passato a log()
e in base al tipo, genera una rappresentazione diversa.
Venendo al vostro caso, log()
stampe due valori diversi per le stringhe create utilizzando la notazione literal
e stringhe create utilizzando String
costruttore, perché sono due diversi types
. Come spiegato here, le stringhe create usando la notazione letterale sono chiamate String Primitives
e le stringhe create utilizzando il costruttore String sono chiamate String Objects
.
Poiché i tipi sono diversi, la loro rappresentazione di stringa differisce nell'API di Console. Se si passa attraverso il codice per l'implementazione Console di FF, l'ultima affermazione è
return " " + aThing.toString() + "\n";
Quindi, per rispondere alla tua domanda, API Console in FF chiama toString()
sull'argomento solo se il tipo argomento non è uno dei {undefined,null,object,set,map}
tipi. Non sempre chiama i metodi toString()
o valueOf()
. Non ho controllato l'implementazione di Chrome, quindi non lo farò.
La tua domanda è limitata a Mozzilla? – Roberto
@Roberto No, non è limitato a Mozzila. – gurvinder372