suchen
HeimWeb-FrontendFront-End-Fragen und AntwortenJavaScript-Typkonvertierung (ausführliche Erklärung und Beispiele)

Dieser Artikel vermittelt Ihnen Kenntnisse über die Typkonvertierung in JavaScript, die Konvertierung von Werten in Grundwerte, die Konvertierung in Zahlen und die Konvertierung in Zeichenfolgen, was den drei abstrakten Operationen innerhalb der Engine entspricht: ToPrimitive(), ToNumber(), ToString() , ich hoffe, es wird für alle hilfreich sein.

JavaScript-Typkonvertierung (ausführliche Erklärung und Beispiele)

JavaScript-Additionsregeln

In JavaScript gibt es eigentlich nur zwei Situationen:

  • Zahlen zu Zahlen hinzufügen

  • Strings zu Strings hinzufügen

Alle anderen Wertetypen werden automatisch in diese beiden Wertetypen konvertiert

In JavaScript gibt es zwei Wertetypen:

  • Die ursprünglichen Werte sind: undefiniert, null, boolean ) , Zahl, Zeichenfolge, Symbol

  • Objektwert: Alle anderen Werte sind Objekttypwerte, einschließlich Arrays und Funktionen

Typkonvertierung

Der Additionsoperator löst drei Typkonvertierungen aus: Konvertieren Wert in einen Grundwert umwandeln, in eine Zahl umwandeln und in einen String umwandeln, was den drei abstrakten Operationen innerhalb der JavaScript-Engine entspricht: ToPrimitive(), ToNumber() , ToString()

Konvertieren Sie den Wert in das Original Wert durch ToPrimitive()

ToPrimitive(input, PreferredType?)

Der optionale Parameter PreferredType kann Number oder String sein, er stellt nur eine Konvertierungspräferenz dar und das Konvertierungsergebnis muss nicht unbedingt dieser Parameter sein Der Typ, auf den verwiesen wird, aber das Konvertierungsergebnis muss sein ein primitiver Wert. Wenn der PreferredType als Zahl markiert ist, werden die folgenden Operationen ausgeführt, um den Eingabewert zu konvertieren (§9.1):

  • Wenn der Eingabewert bereits ein primitiver Wert ist, wird er direkt zurückgegeben

    Andernfalls, wenn der Eingabewert ein Objekt ist, rufen Sie die Methode valueOf() des Objekts auf. Wenn der Rückgabewert der Methode valueOf() ein primitiver Wert ist, geben Sie den ursprünglichen Wert zurück.
  • Andernfalls rufen Sie toString auf ()-Methode dieses Objekts. Wenn der Rückgabewert der toString()-Methode ein primitiver Wert ist, geben Sie den primitiven Wert zurück. Andernfalls wird eine TypeError-Ausnahme ausgelöst String, die Reihenfolge des zweiten und dritten Schritts des Konvertierungsvorgangs wird umgekehrt. Wenn kein PreferredType-Parameter vorhanden ist, wird der Wert von PreferredType automatisch gemäß den folgenden Regeln festgelegt: Objekte vom Typ „Datum“ werden auf „String“ festgelegt, andere Der Typwert wird auf „Number“ gesetzt.

  • Konvertieren Sie den Wert in eine Zahl mit „ToNumber()“. value Das Objekt wird in einen Grundwert konvertiert und dann wird ToNumber() aufgerufen, um diesen Grundwert in eine Zahl umzuwandeln.

  • Konvertieren Sie den Wert über ToString() in eine Zeichenfolge Wenn value ein Objekt ist, wird zuerst ToPrimitive(obj, String) aufgerufen, um das Objekt in einen primitiven Wert umzuwandeln, und dann wird ToString() aufgerufen, um den primitiven Wert in einen String umzuwandeln
    var obj = {
        valueOf: function () {
            console.log("valueOf");
            return {}; // 没有返回原始值
        },
        toString: function () {
            console.log("toString");
            return {}; // 没有返回原始值
        }
    }

    Number wird als Funktion (anstatt als Konstruktor aufgerufen) aufgerufen, die ToNumber()-Operation wird intern in der Engine aufgerufen:

    Number(obj)
    // output
    valueOf
    toString
    Uncaught TypeError: Cannot convert object to primitive value
    String(obj)
    // output
    toString
    valueOf
    Uncaught TypeError: Cannot convert object to primitive value

Addition

    value1 + value2
Bei der Berechnung dieses Ausdrucks wird die Operation Die Schritte lauten wie folgt:

Kombinieren Sie die beiden Operanden und konvertieren Sie sie in primitive Werte (das Folgende ist eine mathematische Notation, kein JavaScript-Code): JavaScript-Typkonvertierung (ausführliche Erklärung und Beispiele)

    prim1 := ToPrimitive(value1)
    prim2 := ToPrimitive(value2)

PreferredType wird weggelassen, daher werden Werte vom Typ Date angenommen String und Werte anderer Typen nehmen Number an.

Wenn prim1 oder prim2 einer von ihnen ein String ist, konvertieren Sie den anderen in einen String und geben Sie dann das Ergebnis der beiden String-Verkettungsoperationen zurück

JavaScript-Typkonvertierung (ausführliche Erklärung und Beispiele) Andernfalls konvertieren Sie sowohl prim1 als auch prim2 in numerische Typen und geben deren Summe zurück.

[]+[]

Ausgabe: ''

[] wird in einen primitiven Wert konvertiert. Probieren Sie zuerst die Methode valueOf() aus und geben Sie das Array selbst zurück (dieses):

> var arr = [];
> arr.valueOf() === arr
true
so Das Ergebnis ist kein primitiver Wert, daher wird die toString()-Methode erneut aufgerufen und gibt eine leere Zeichenfolge zurück (was ein primitiver Wert ist). Daher ist das Ergebnis von [] + [] tatsächlich die Verkettung zweier leerer Zeichenfolgen
> [] + {}
'[object Object]'

{} + {}

  • Ausgabe: NaN

Das erste {} wird vom JavaScript interpretiert Motor Es wurde zu einem leeren Codeblock und ignorierte ihn

  • Das Pluszeichen hier ist kein binärer Operator, der eine Addition darstellt, sondern ein unärer Operator, der die darauf folgenden Operanden in Zahlen umwandelt, und die Funktion Number () ist genau dieselbe. Zum Beispiel:

+{}
Number({})
Number({}.toString())  // 因为{}.valueOf()不是原始值
Number("[object Object]")
NaN
> {} + []
0
  • {} 忽略

  • +[] = Number([]) = Number([].toString()) = Number("") = 0

有趣的是,Node.js的REPL在解析类似的输入时,与Firefox和Chrome(和Node.js一样使用V8引擎)的解析结果不同.下面的输入会被解析成一个表达式,结果更符合我们的预料:

> {} + {}
'[object Object][object Object]'
> {} + []
'[object Object]'

总结

对象.valueOf() === 对象

数组对象.toString() === 数组对象.join()

对象.toString() === "[object Object]"

Javacript 中 + 号工作:

  • 数字 + 数字

  • 字符串 + 字符串

【相关推荐:javascript学习教程

Das obige ist der detaillierte Inhalt vonJavaScript-Typkonvertierung (ausführliche Erklärung und Beispiele). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Dieser Artikel ist reproduziert unter:掘金. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Was sind die Einschränkungen des Reags?Was sind die Einschränkungen des Reags?May 02, 2025 am 12:26 AM

React'Slimitationsinsclude: 1) AsteeplearningCurveduetoitsVastecosystem, 2) SeochallengeswithClient-Siderendering, 3) potentialperformanceIssuessinlargeApplications, 4) ComplexStatemanagementasappsgrow und 5)

Reacts Lernkurve: Herausforderungen für neue EntwicklerReacts Lernkurve: Herausforderungen für neue EntwicklerMay 02, 2025 am 12:24 AM

ReactischalengingforBeginsnersDuetoitsSsteeplearningCurveandaradigmShifttocomponent-basiert

Erzeugen Sie stabile und eindeutige Schlüssel für dynamische Listen in ReactErzeugen Sie stabile und eindeutige Schlüssel für dynamische Listen in ReactMay 02, 2025 am 12:22 AM

ThecorechalengesingeneratingStableanduniqueKeysfordynamiclistsinReactissenuringConsistentifiersacrossre-Rendersforeffictimupdates.1) UsenaturalkeysWenPossible, astheyarerelableIniqueandstable.2) Generatesynthetikeysbuktipleatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatiipatribbuse

JavaScript Müdigkeit: Strom mit React und seinen Werkzeugen auf dem Laufenden bleibenJavaScript Müdigkeit: Strom mit React und seinen Werkzeugen auf dem Laufenden bleibenMay 02, 2025 am 12:19 AM

JavaScriptFatigueInreactismanagable WithStrateShust Just-in-TimelearningandCuratedInformationSources.1) lernwhatyouneedwhenyouneedit, FocusingonProjectrelevance.2) FollowerKeyblogsliketheofficialreactblogandengageGaTaNitiesLikeritiesLikeritiesLikeritiesLikeritiesLikeritiesLikeritiesLikeritiesLikeritiesLikeritiesLikeritiesLikeritieslikeritieslikeritieslikeritieslikeritieslikeritieslikeritieslikeritieslikeritäten

Testen von Komponenten, die den Usestate () -Haken verwendenTesten von Komponenten, die den Usestate () -Haken verwendenMay 02, 2025 am 12:13 AM

TOTESTEACTCOMPONENTENSUSSUSHEUSESTATEHOOK, UseJestandReactestinglibrarytosimulateInteractions undVerifyStatechangesintheui.1)

Schlüssel in React: Ein tiefes Eintauchen in die LeistungsoptimierungstechnikenSchlüssel in React: Ein tiefes Eintauchen in die LeistungsoptimierungstechnikenMay 01, 2025 am 12:25 AM

KeysinReactarecrucialforoptimizingperformancebyaidinginefficientlistupdates.1)Usekeystoidentifyandtracklistelements.2)Avoidusingarrayindicesaskeystopreventperformanceissues.3)Choosestableidentifierslikeitem.idtomaintaincomponentstateandimproveperform

Was sind Schlüssel in React?Was sind Schlüssel in React?May 01, 2025 am 12:25 AM

ReactkeysareUniEDIDIFIERSUTEUTSUTEUTWIEDERRENDERINGLISTSTOIMPROVERCONILIATIONEffizienz.1) TheHelPreactrackchangesinlistItitems, 2) Verwenden von StableanduniTheSlikeItemidsisRecopeds, 3) EngitaryIndicesSkeyStopissuesuesuesuors und 4) Enters

Die Bedeutung einzigartiger Schlüssel in React: Vermeidung häufiger FallstrickeDie Bedeutung einzigartiger Schlüssel in React: Vermeidung häufiger FallstrickeMay 01, 2025 am 12:19 AM

UniqueKeysarecrucialinreactforoptimizingRenderingandMaintainingcomponentStateIntegral.1) UseanaturaluniqueIdentifierfromyourdataIFAVAILABALL.2) IFNONATIONIGIDIDIFIFIEREXISTER, ERGENATEAINIQUEUSKEISELSCHAFT.3) Vermeiden Sie arrayindicesexisten, speziell

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

DVWA

DVWA

Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

MinGW – Minimalistisches GNU für Windows

MinGW – Minimalistisches GNU für Windows

Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.