Ruft console.log die toString-Methode eines Objekts auf?

9

Gemäß dieser Dokumentation

  

Die String-Darstellungen jedes dieser Objekte sind angehängt   zusammen in der Reihenfolge aufgeführt und ausgegeben.

Auch nach antworten

  

Das + x erzwingt das Objekt x in eine Zeichenkette, die nur [Objekt ist   Objekt]:

Also, meine Frage ist

Wenn ich das tue

%Vor%

Im ersten Fall wird einfach das Objekt gedruckt (ruft nicht die Methode toString() auf).

Aber im zweiten Fall wird nicht gezwungen, sondern einfach der Grundwert ausgegeben. Warum ist das so?

Welche Methode ruft console.log auf, um das Objekt zu drucken?

Bitte beachten Sie, dass dies kein Duplikat von Frage .

    
gurvinder372 25.03.2016, 06:50
quelle

3 Antworten

9

Die Konsolen-API ist keine Standard-API, die in einer Spezifikation definiert ist, sondern in allen Browsern implementiert ist, so dass es den Anbietern in der Regel freisteht, sie auf ihre eigene Art und Weise zu implementieren, da es keine Standardspezifikation gibt Methoden in API.

Wenn Sie die tatsächliche Implementierung der Konsolen-API für einen bestimmten Browser nicht überprüfen, können Sie sich nie sicher sein. Auf GitHub gibt es einen Tracker , der die Unterschiede zwischen den wichtigsten Browsern auflistet.

Wenn Sie sich die Implementierung in FF ansehen (verfügbar hier - Suche nach Protokoll), es hat einen Kommentar unter

  

Eine mehrzeilige Zeichenfolge für ein Objekt, das für Menschen gedacht ist

Die tatsächliche Implementierung prüft den Typ des Arguments, das an log() übergeben wird, und generiert basierend auf seinem Typ eine andere Darstellung.

In Ihrem Fall gibt log() zwei unterschiedliche Werte für Strings aus, die mit literal notation erstellt wurden, und Strings, die mit String constructor erstellt wurden, weil sie zwei verschiedene types sind. Wie in hier erklärt, werden Strings, die mit Literal Notation erstellt wurden,% genannt co_de% und Strings, die mit dem String-Konstruktor erstellt wurden, heißen String Primitives .

%Vor%

Da sich die Typen unterscheiden, unterscheidet sich ihre Zeichenfolgendarstellung in der Konsolen-API. Wenn Sie den Code für die Implementierung von FF Console durchgehen, lautet die letzte Anweisung

%Vor%

Um Ihre Frage zu beantworten, ruft die Console-API in FF String Objects für das Argument nur dann auf, wenn der Argumenttyp nicht zu toString() types gehört. Es ruft nicht immer {undefined,null,object,set,map} oder toString() Methoden auf. Ich habe die Implementierung von Chrome nicht überprüft, daher werde ich dazu nichts sagen.

    
Arkantos 25.03.2016, 07:51
quelle
1

console.log(str) ruft str.valueOf() auf Ich denke. Von JavaScript - The Definitive Guide Seine Aufgabe besteht darin, ein Objekt in einen primitiven Wert zu konvertieren. Die Methode valueOf() wird automatisch aufgerufen, wenn ein Objekt in einem numerischen Kontext verwendet wird, mit arithmetischen Operatoren (anders als +) und beispielsweise mit den relationalen Operatoren. Die meisten Objekte haben keine vernünftige primitive Darstellung und definieren diese Methode nicht.

--- edit ---- Sorry, kopiere die falsche Zeile, ich meine die "+ str", da gibt es einen Typ, der konvertiert

    
cyl19910101 25.03.2016 07:00
quelle
1

Es verwendet nicht toString, Sie können so etwas tun

%Vor%     
A.Zaben 10.08.2016 07:28
quelle