Analysieren von WTF-Aufgaben in JavaScript


JavaScript ist eine spezielle Sprache. Egal wie viel Sie lernen, es wird immer Momente geben, die selbst einen erfahrenen Profi dazu bringen, Rüben zu kratzen.


Dieser Artikel enthält einige JavaScript-Rätsel zum ungewöhnlichen Sprachverhalten. Sie werden jemandem helfen, etwas Neues zu lernen, und jemand wird einfach in der Lage sein, sein Wissen aufzufrischen.


Aufgabe 1 - "BANANE"



Dieser Tweet hat zu der Zeit einige Popularität im englischsprachigen Twitter-Segment für JavaScript gewonnen. Nicht zuletzt, weil es gar nicht klar ist, was hier passiert.


Lösung

Das "b" und "a" am Anfang sind nur Zeichenfolgen, die sich zu "ba" summieren. Nach "a" sehen Sie zwei Pluszeichen (+). Der erste ist zum Hinzufügen vorgesehen, der zweite ist ein unärer Operator, der die darauf folgende Zeichenfolge in eine Zahl umwandelt. Da das zweite "a" nicht in eine Zahl umgewandelt werden kann, wird es in "NaN" umgewandelt.


Wir haben also: "ba" + "NaN" + "a" - "baNaNa". toLowerCase gibt uns heimtückisch das Endergebnis - "Banane".



Aufgabe 2 - Hinzufügen von Arrays



Dies ist eine einfache Aufgabe, aber eine Person, die mit der Funktionsweise von JavaScript nicht vertraut ist, kann verwirrend sein.


Lösung

Zuerst werden Arrays in Strings konvertiert - "1,2,3" und "4,5,6". Das Ergebnis der Verkettung dieser Zeilen ist die endgültige Antwort - die Zeichenfolge "1,2,34,5,6".



Task 3 - Funktion parseInt ()


Von allen JavaScript-Aufgaben war dies für mich die schwierigste.



Wenn wahrscheinlich alles auf die eine oder andere Weise mit parseInt in JavaScript in Berührung gekommen ist, wissen weniger Leute über die Existenz des zweiten optionalen Parameters „radix“ Bescheid. Dies ist die Basis des Zahlensystems des ersten Arguments.


Lösung

Das erste Argument "null" wird in eine Zeichenfolge konvertiert. Das erste Zeichen dieser Zeichenfolge „n“ wird im Zahlensystem mit der Basis 24 in eine Zahl umgewandelt. Das Ergebnis dieser Umwandlung ist 23.


parseInt analysiert die Zeichenfolge weiterhin zeichenweise, bis es auf ein Zeichen stößt, das nicht in eine Zahl konvertiert werden kann. Dies ist das zweite Zeichen der Zeichenfolge - "u", da es im Zahlensystem mit der Basis 24 keine solche Ziffer gibt.


Auf diese Weise:


parseInt(null, 24) === parseInt("null", 24) parseInt("null", 24) === parseInt("n", 24) parseInt("n", 24) === 23 


Aufgabe 4 - Präzise Gleitkommazahlen



Es sieht schrecklich aus, aber in gewissem Maße kann man in jeder Sprache, die Gleitkommaberechnungen verwendet, auf eine ähnliche Sprache stoßen.


Lösung
 console.log(0.1 + 0.2); // 0.30000000000000004 

Die Konstanten „0.2“ und „0.3“ im Programm werden in der Maschinendarstellung an ihre „realen“ Werte angenähert. Und es ist einfach so passiert, dass das nächste Doppel von „0.2“ größer ist als die rationale Zahl „0.2“. Andererseits ist das nächstliegende Doppel zu "0,3" geringer als das vernünftige "0,3".


Somit ist die Summe von "0.1" und "0.2" im Code größer als das rationale "0.3" und die Konstante "0.3" im Code ist kleiner als das rationale "0.3".


Hinweis für die Gastgeberin: Verwenden Sie niemals "===" oder "==", um mit Gleitkommazahlen zu arbeiten. Verwenden Sie stattdessen


 if (abs(x - y) < toleranceValue) { ... } 




Fazit


Ja, wenn Sie mit JavaScript arbeiten, gibt es viele WTF-Momente. Auf der anderen Seite, welche andere Sprache kann so viele unvergessliche Empfindungen geben?


Unten finden Sie eine Liste von Links (auf Englisch), über die Sie sich eingehend mit den Aufgaben dieses Beitrags befassen können (und nicht nur):


Source: https://habr.com/ru/post/de479496/


All Articles