Rätselhafte JavaScript-Verhaltensweisen im „Wat“-Talk
Der „Wat“-Talk für CodeMash 2012 hat einige eigenartige Verhaltensweisen in JavaScript hervorgehoben, und das ist es auch Es lohnt sich, sie zu erkunden, um zu verstehen, was hinter den Kulissen passiert.
[] []
Der mit leeren Arrays verwendete Additionsoperator ( ) wandelt Operanden in Grundelemente um und verbindet sie. Da der standardmäßige Grundwert von Arrays ein leerer String ist, ist das Ergebnis von [] [] ein leerer String.
[] {}
Objekte in JavaScript haben einen toString() Methode, die beim Aufruf „[object Object]“ zurückgibt. Somit ergibt [] {} ein Objekt, insbesondere die Zeichenfolge „[object Object]“.
{} []
Bei Verwendung in einer Anweisung wird {} analysiert als leerer Block und gibt daher undefiniert zurück. Der Operator erzwingt undefinierte Operanden in Zahlen, was zu 0 für {} [] führt (wobei im „Wat“-Talk erwähnt wird, dass es NaN sein sollte).
{} {}
Ähnlich bis {} [] wird das erste {} als leerer Block analysiert, was zu undefiniert führt. Der Operator schafft es jedoch nicht, die Zeichenfolge „[object Object]“ (den toString()-Wert des zweiten {}) in eine Zahl umzuwandeln, was zu NaN.
Array(16).join führt ("wat" - 1)
ToNumber() konvertiert "wat" - 1 in NaN, da das Subtrahieren einer Zahl von einer Zeichenfolge a ergibt nicht numerischer Wert. ToPrimitive() wandelt dann NaN in die Zeichenfolge „NaN“ um, die beim Zusammenfügen der Array-Elemente 16 Mal wiederholt wird.
Fazit
Diese scheinbar bizarren Verhaltensweisen sind auf die primitiven Konvertierungsregeln von JavaScript zurückzuführen und die spezifischen Methoden, die Arrays und Objekten zugeordnet sind. Wenn Sie diese zugrunde liegenden Mechanismen verstehen, können Sie unerwartete Ergebnisse vermeiden und die volle Leistungsfähigkeit von JavaScript nutzen.
Das obige ist der detaillierte Inhalt vonWarum führt JavaScript bei diesen seltsamen Rechenoperationen zu unerwarteten Ergebnissen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!