Wie ist der Alarm (++ [[]] [+ []] + [+ []]); berechnet zu 0? Wie heißt dieser Prozess, damit ich mehr darüber lesen kannWie ist der Alarm (++ [[]] [+ []] + [+ []]); berechnet zu 0?
Antwort
Der Ausdruck wird tatsächlich die Zeichenfolge '10'
zurückgeben. Lassen Sie uns es brechen:
Schritt 1: +[]
Dies ist ein unäres Plus Operator wörtliche durch ein leeres Array gefolgt. Das unäre Plus versucht, den folgenden Wert in eine Ganzzahl zu konvertieren. In diesem Fall ist der Wert ein Array:
+[]; // 0
// This is identical:
Number([]); // 0
Der zurückgegebene Wert entspricht [].toString()
Aufruf und dann dassNumber()
Ergebnis zu geben. [].toString()
gibt eine leere Zeichenfolge (''
) zurück und Number('')
gibt 0
zurück.
Das Array-Objekt überschreibt die toString Verfahren zum Objekt. Bei Array-Objekten verbindet die toString-Methode das Array und gibt eine Zeichenfolge zurück, die jedes Array-Element durch Kommas getrennt enthält.
In einem nicht-Konstruktor Kontext (das heißt, ohne den
new
Operator),Number
kann eine Typumwandlung durchzuführen verwendet werden.
Wenn wir also Vorkommen von +[]
-0
in der Quelle zu ändern, bekommen wir:
++[[]][0] + [0]
Schritt 2: [[]][0]
Dieser Schritt ist ein einfaches Bedienelement Zugriff Array: Ein Array mit einem verschachtelten (leeren) Array wird zuerst definiert, und dann wird auf dieses erste verschachtelte Array mit [0]
zugegriffen, das einfach []
zurückgibt. Also, wenn wir diesen Teil des Ausdrucks ersetzen, erhalten wir:
++[] + [0]
Schritt 3: ++[]
Die ++ <value>
Betreiber ersten versucht <value>
in eine Zahl zu konvertieren, und erhöht dann die Zahl 1. Das Verfahren zum Konvertieren des Arrays in eine Zahl in diesem Beispiel erfolgt genauso wie +[]
in Schritt 1: []
wird zuerst in eine Zeichenfolge konvertiert (''
in diesem Fall, da das Array leer ist) und dann in konvertiert eine Nummer, die wieder retu rns 0
. Zuletzt wird 0
um 1
inkrementiert, was 1
zurückgibt.Also, wenn wir diesen Teil des Ausdrucks ersetzen, erhalten wir:
1 + [0]
Schritt 4: 1 + [0]
Dies ist der seltsame Teil der Geschichte ist. Sie würden erwarten, dass dies bei den gegebenen Informationen die Ganzzahl 1
ergibt, aber tatsächlich wird es zu einer Zeichenkette '10'
ausgewertet. Dies liegt an den zwei Schritten im obigen Beispiel für die Typumwandlungen von Arrays (zuerst in Zeichenfolge, dann in Nummer). Diese zwei Schritte waren erforderlich, da die Arrays immer Operanden arithmetischer Operatoren waren (d. H. Mathematische Berechnungen). Der Operator +
kann jedoch sowohl als Arithmetik +
Operator oder String-Verkettung Operator dienen, und Letzteres hat immer Vorrang.
So sobald [0]
in einen String umgewandelt wird, die beide an den +
Operator gegebenen Operanden wird in einen String umgewandelt werden, da ein Operand bereits eine Zeichenfolge ist. Wenn wir nun den Ausdruck durch konvertierte Operanden ersetzen, erhalten wir den letzten Schritt bei der Auswertung des Ausdrucks:
@ Jeffrey Westerkamp gibt es keinen Vorrang für das, ich meine im Allgemeinen, nicht nur für diesen Code –
Wenn du meinst _should ich dieses in irgendeiner verwenden meiner Projekte_, ist die Antwort definitiv nein. Diese Snippets sollten als Puzzles betrachtet werden, um Ihnen zu helfen, die Macken von JS zu verstehen. Meine Meinung: niemals, niemals diese Art von "Magie" in realen Szenarien. –
In Ordnung. Vielen Dank –
- 1. Warum berechnet Math.min ([]) 0?
- 2. JavaScript Rechner Alarm dont Division von 0
- 3. Wie berechnet man die Gesamtzahl der Buckets, deren Wert größer als 0 ist?
- 4. Überprüfen, ob der Alarm deaktiviert ist
- 5. Tableau isNull dann 0 berechnet Feld
- 6. SimpleCov berechnet 0% Deckung für Benutzermodell
- 7. Alarm zu früh ausgelöst
- 8. Wie wird der Zeitunterschied berechnet?
- 9. Wie Fenster/Tab wie Alarm() zu fokussieren?
- 10. Android - Alarm Manager täglicher Alarm zu einer bestimmten Zeit eingestellt?
- 11. So überprüfen Sie, ob der Alarm eingestellt ist
- 12. Zeige Alarm wie Menü Alarm in android
- 13. Benutzerdefinierter Alarm Süß Alarm
- 14. Wie wird der R2-Wert in Scikit berechnet berechnet?
- 15. Wie berechnet OpenGL Shader-Threads zu Warps?
- 16. Verständnis der Bedeutung von 0? 0
- 17. 0 ist 0 == 0 (#bewertet True?)
- 18. Warum! (0 || 1 || 0) ist 0?
- 19. wie man Umsatzsteuer% zu 0 ändert 0
- 20. Warum erscheint der Alarm nicht?
- 21. Android Studio Den Mediaplayer starten, wenn der Alarm bereit ist
- 22. geplant Alarm zu jeder Minute der Uhr android
- 23. Wie wird der Verlust im Tensorflow berechnet?
- 24. IndexError: Index 0 ist außerhalb der Grenzen für Achse 0 mit der Größe 0
- 25. berechnet Erreichbarkeit zu einer Funktion ist frama-c die Wertanalyse
- 26. Bootstrap-Alarm-Box ist zu groß in der Höhe, wenn Link darin ist
- 27. Wie berechnet man Perzentile aus der Häufigkeitstabelle?
- 28. Wie wird der Alarm Manager zum Wiederholen der Methodenausführungsfunktion verwendet?
- 29. React-Virtualized Autosizer berechnet Höhe als 0 für VirtualScroll
- 30. Wie Zeitplan wiederholen Alarm und einmal Alarm in Android
Was versuchen Sie zu tun? erklären Sie mehr – Bhargav
tatsächlich in jfiddle ist es 10! : 0 @Bhargav ... Ich denke es ist nur aus Neugier ... Ich würde gerne wissen, warum JS hier überhaupt etwas berechnet – CodeHacker
Siehe [JSFUCK] (https://en.wikipedia.org/wiki/JSFuck) –