Heim > Web-Frontend > js-Tutorial > Warum führt JavaScript mit den Operatoren „and' zu so unerwarteten Ergebnissen?

Warum führt JavaScript mit den Operatoren „and' zu so unerwarteten Ergebnissen?

DDD
Freigeben: 2024-12-17 09:10:25
Original
783 Leute haben es durchsucht

Why Does JavaScript Produce Such Unexpected Results with the   and - Operators?

Bizarre JavaScript-Verhaltensweisen aus dem „Wat“-Vortrag für CodeMash 2012

In dem zum Nachdenken anregenden „Wat“-Vortrag auf CodeMash 2012 wurde eine Reihe eigenartiger JavaScript-Macken erwähnt hervorgehoben. Diese Verhaltensweisen werfen Fragen darüber auf, wie JavaScript hinter den Kulissen funktioniert.

Additivoperator und Arrays

Der Additionsoperator ( ) stellt bei Verwendung mit Arrays einzigartige Herausforderungen dar:

  • [] []: Unerwarteterweise führt die Verkettung zweier leerer Arrays zu einem leeren Array string.
  • [] {}: Das Hinzufügen eines leeren Arrays und eines Objekts ergibt „[Objekt]“, was darauf hindeutet, dass der Operator das Array in ein Grundelement umwandelt.
  • {} []: Dieses Verhalten variiert je nach JavaScript-Engine. Während das Video vorschlägt, dass das Ergebnis 0 sein sollte, geben einige Umgebungen „[Object]“ zurück.
  • {} {}: Das Hinzufügen von zwei Objekten führt zu „Object“, was darauf hinweist, dass JavaScript Objekte konvertiert zu Strings bei der Addition.

Subtrahieren von Strings von Zahlen

Bei der Anwendung von Operatoren auf Werte unterschiedlichen Typs gibt es Besonderheiten entstehen:

  • Array(16).join("wat" - 1): Dieser Ausdruck erzeugt „NaNNaNNaNNaNNaNNaN“. JavaScript zwingt „wat“ - 1 in NaN und verkettet es mit der leeren Zeichenfolge, um das Join-Argument zu bilden.

Diese Macken verstehen

Um diese Verhaltensweisen zu verstehen, ist es wichtig, sich damit zu befassen der ECMA-262-Standard:

  • [] []:Arrays werden mit ihrer toString()-Methode in Grundelemente konvertiert und geben für leere Arrays eine leere Zeichenfolge zurück.
  • [] {}:Objekte werden mit ebenfalls in Grundelemente konvertiert toString(), was zu „[object Object]“ für nicht leere Objekte führt.
  • {} []: Leer Blockanweisungen haben keinen Rückgabewert, was dazu führt, dass unär 0 für ein Array zurückgibt (in eine leere Zeichenfolge gezwungen).
  • {} {}: Der Operator wandelt Objekte in Zeichenfolgen um, was zu „ [object Object]".
  • Array(16).join("wat" - 1): NaN-Ergebnisse aus dem Versuch Subtrahieren Sie eine Zahl von einer Zeichenfolge.

Erzwungene Ausdrucksanweisung

In bestimmten Kontexten kann die {}-Syntax als Ausdrucksanweisung und nicht als Objektliteral interpretiert werden, was die ändern kann erwartetes Ergebnis von Vorgängen.

Das Verständnis dieser bizarren JavaScript-Verhaltensweisen ist entscheidend für das Schreiben von robustem und vorhersehbarem Code und stellt sicher, dass Ihre Skripte wie funktionieren beabsichtigt.

Das obige ist der detaillierte Inhalt vonWarum führt JavaScript mit den Operatoren „and' zu so unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage