Detaillierte Erläuterung der Konvertierung von JavaScript-Objekten in primitive Werte

Detaillierte Erläuterung der Konvertierung von JavaScript-Objekten in primitive Werte

Objekt.prototype.valueOf()

Der valueOf eines Objekts ist so konzipiert, dass er den primitiven Wert des Objekts zurückgibt und bei Bedarf automatisch die Konvertierung des Objekts in seinen primitiven Wert durchführt. Klicken Sie hier für Details.

Objekt.prototype.toString()

Die Methode toString() gibt eine Zeichenfolgendarstellung des Objekts zurück und wird automatisch ausgeführt, wenn ein Objekt in eine Zeichenfolge konvertiert werden soll. Die Standardmethode toString() eines Objekts gibt [Objekttyp] zurück, wobei Typ der Name des Konstruktors des Objekts ist. Klicken Sie hier für Details.

Symbol.toPrimitive

Symbol.toPrimitive(hint) hat dieselbe Funktion wie valueOf(), hat aber eine höhere Priorität als valueOf(); außerdem akzeptiert die Methode einen Parameterhinweis, der verwendet wird, um den spezifischen Typ des zu konvertierenden Originalwerts anzugeben:

  • Nummer: numerischer Typ
  • Zeichenfolge: Zeichenfolgentyp
  • Standard: Standard
lass obj = {
  [Symbol.toPrimitive](Hinweis) {
    Schalter (Hinweis) {
      Fall 'Nummer':
        Rückgabe 123;
      Fall 'Zeichenfolge':
        gib 'str' zurück;
      Fall 'Standard':
        gib „Standard“ zurück;
      Standard:
        neuen Fehler werfen();
     }
   }
};
2 * Objekt // 246
3 + Objekt // '3Standard'
obj == 'Standard' // wahr
Zeichenfolge (Objekt) // 'str'

Objektkonvertierungsprimitivwert

Die oben genannten drei Methoden werden ausgelöst, wenn erwartet wird, dass das Objekt in einen primitiven Wert konvertiert wird.

1. Wird voraussichtlich in den String-Typ konvertiert

Der entsprechende Hinweistyp ist String

Wo die Ausgabe erfolgt, z. B. alert()

Zeichenfolge (Objekt)

sei a = {
  zuString () {
    Rückgabewert '2'
  }
}
console.log(Zeichenfolge(a)) // 2

Zeichenfolgenverkettungsvorgang (+)

sei a = {
  zuString () {
    Rückgabewert '2'
  }
}
konsole.log(a + 'vv')

Vorlagenzeichenfolgen

sei a = {
  [Symbol.toPrimitive] (Hinweis) {
    console.log(Hinweis) // Zeichenfolge
    Rückgabe 2
  }
}
console.log(`Bist du alt ${a}?`) // Bist du alt 2?

2. Wird voraussichtlich in einen numerischen Typ konvertiert

Der entsprechende Hinweistyp ist Nummer

Division:

sei a = {
  Wert von () {
    Rückgabe 2
  }
}
konsole.log(2 / a, a / 2) // 1 1

Nummer (Objekt):

sei a = {
  [Symbol.toPrimitive] (Hinweis) {
    console.log(Hinweis) // Nummer
    Rückgabe 2
  }
}
console.log(Zahl(a)) // 2

Positive und negative Vorzeichen (beachten Sie, dass es sich nicht um eine Additions- oder Subtraktionsoperation handelt):

sei a = {
  [Symbol.toPrimitive] (Hinweis) {
    console.log(Hinweis) // Nummer
    Rückgabe 2
  }
}
console.log(+a) // 2
console.log(-a) // -2

3. Voraussichtliche Konvertierung in den Standardtyp (anderes)

Der entsprechende Hinweistyp ist Standard

Numerische Addition (d. h. das hinzugefügte Objekt ist ein numerischer Typ):

sei a = {
  [Symbol.toPrimitive] (Hinweis) {
    console.log(Hinweis) // Standard
    Rückgabe 2
  }
}
konsole.log(1 + a) // 3

Das ist etwas unerwartet. Ich dachte, dass der erwartete Konvertierungstyp in diesem Fall ein numerischer Typ sein sollte, aber tatsächlich ist es der Standardtyp.

Boolesche Operationen : Alle Objekte werden in „true“ umgewandelt;

sei a = {
  [Symbol.toPrimitive] (Hinweis) {
    console.log(Hinweis) // Kein Trigger gibt false zurück.
  }
}
console.log(Boolean(a), a && 123) // wahr 123

Zu den Booleschen Operationen gehören ==

Die Reihenfolge, in der die drei Methoden ausgelöst werden

Stellen Sie zunächst fest, ob das Objekt über die Methode Symbol.toPrimitive(hint) verfügt. Wenn ja, führen Sie die Methode aus. Wenn nicht, führen Sie die folgenden Schritte aus.

Wenn eine Konvertierung in einen String-Typ erwartet wird, wird zuerst die Methode toString() ausgeführt;

Wenn eine Konvertierung in den Standardtyp oder numerischen Typ erwartet wird, wird zuerst die Methode valueOf() ausgeführt:

Hinweis : Wenn keine valueOf()-Methode vorhanden ist, aber eine toString()-Methode definiert ist, wird die toString()-Methode ausgeführt.

Zusammenfassen

Dieser Artikel endet hier. Ich hoffe, er kann Ihnen helfen. Ich hoffe auch, dass Sie mehr Inhalt auf 123WORDPRESS.COM lesen können!

Das könnte Sie auch interessieren:
  • 4 gängige Möglichkeiten zum Erstellen von Objekten in js und ihre Vor- und Nachteile
  • Einführung in integrierte JavaScript-Objekte
  • Einführung in die Unveränderlichkeit von JavaScript-Objekten

<<:  Css3 realisiert nahtloses Scrollen und Anti-Shake

>>:  Lösung für zu große Mysql-Binlog-Protokolldateien

Artikel empfehlen

Wichtige Hinweise zu PHP-HTMLhtml-Wissenspunkten (unbedingt lesen)

1. Verwenden Sie Frameset, Frame und Iframe, um m...

Lösung für Nginx, das nicht zur Upstream-Adresse springt

Vorwort Heute bin ich in Nginx auf ein sehr selts...

Linux nutzt duale Netzwerkkartenbindung und Schraubendreherschnittstelle

Was ist eine Bindung? NIC-Bond ist eine Technolog...

Einführung und detaillierte Verwendung von React Fragment

Inhaltsverzeichnis Vorwort Motivation für Fragmen...

JavaScript-Sandbox-Erkundung

Inhaltsverzeichnis 1. Szenario 2. Grundfunktionen...

Installieren Sie das komprimierte MySQL5.7-Paket schnell unter Windows

In diesem Artikel erfahren Sie, wie Sie das kompr...

Einführung in den Befehl „Linux-Typversion-Speicherfestplattenabfrage“

1. Lassen Sie uns zunächst eine allgemeine Einfüh...

JavaScript zum Erzielen eines Kalendereffekts

In diesem Artikel wird der spezifische Code für J...

Beispielcode zur Implementierung von Anti-Shake in Vue

Anti-Shake: Verhindert, dass wiederholte Klicks E...

Tutorial zur HTML-Tabellenauszeichnung (2): Tabellenrahmenattribute BORDER

Standardmäßig beträgt der Rand der Tabelle 0 und ...

So fügen Sie dem Tomcat-Dienst einen Java-Startbefehl hinzu

Mein erstes Serverprogramm Ich lerne gerade, Onli...