JavaScript ist eine sehr fehlertolerante Programmiersprache und viele Ausdrücke, die in anderen Programmiersprachen nicht zulässig sind, funktionieren in JavaScript einwandfrei.
Dies führt zu einer Menge seltsamem Code. Möchten Sie es herausfordern?
Bei dieser Herausforderung werden Ihnen 20 verrückte Ausdrücke präsentiert und Sie werden gebeten, deren Ausgabe zu erraten.
1.
wahr + falsch
2.
**1.**
3.
[1, 2, 3] + [4, 5, 6]
4.
0,2 + 0,1 === 0,3
5.
10,2
6.
!!""
7.
+!![]
8.
true == "true"
9.
010 - 03
10.
"" - - ""
11.
null + 0
12.
0/0
13.
1/0 === 10 ** 1000
14.
true++
15.
"" - 1
16.
(null - 1) - "1"
17.
38 * 4343 * 2342+ ("true" — 0)
18.
5 + !5 + !!5
19.
[] + [1] + 2
20.
1 + 2 + „3“
wahr + falsch
Beim Versuch, den Additionsoperator (+) zwischen zwei booleschen Werten zu verwenden, werden diese in Zahlen umgewandelt.
Und wir alle wissen true
in 1
und false
in 0
konvertiert werden sollte. Also true+false
gibt 1
zurück.
[,,,].length
[,,,]
gibt ein Array mit drei leeren Slots aus. Das letzte Komma ist das nachgestellte Komma.
Man kann es sich so vorstellen.
[,] ==> [leer,] [,,] ==> [leer, leer,] [,,,] ==> [leer, leer, leer,]
also gibt [,,,].length
3 zurück.
[1, 2, 3] + [4, 5, 6]
Wenn Sie versuchen, den Additionsoperator (+) zwischen Arrays zu verwenden, werden diese in Zeichenfolgen konvertiert.
Beim Konvertieren eines Arrays in einen String wird die toString()
Methode des Arrays aufgerufen. Die toString()
Methode wird intern von JavaScript verwendet. Wenn ein Array als Text angezeigt werden muss, werden seine Elemente durch Kommas verbunden.
[1, 2, 3].toString() ==> '1, 2, 3' [4, 5, 6].toString() ==> '4, 5, 6'
also
[1, 2, 3] + [4, 5, 6] ==> '1, 2, 3' + '4 , 5, 6' ==> "1,2,34,5,6"
0,2 + 0,1 === 0,3
Da Gleitkommazahlen in Computern schwer genau darzustellen sind, können mathematisch 0.1
und 0.2
in Computern nur angenähert werden Darstellung.
Das Ergebnis von 0.1+0.2
ist nicht genau 0.3
. Nicht nur JavaScript, auch andere Programmiersprachen haben das gleiche Problem.
10, 2
Das Komma ( ,
) ist auch ein zulässiger Operator in JavaScript, es wertet jeden Operanden aus (von links nach rechts) und gibt den Wert des letzten Operanden zurück.
Daher gibt 10,2 2 zurück
!!""
""
ist eine leere Zeichenfolge, bei der es sich um einen Dummy-Wert handelt.
Hinweis: 0, leere Zeichenfolge „“, null und undefiniert sind allesamt virtuelle Werte.
!
ist der logische „Nicht“-Operator, der wahr in falsch umwandelt und umgekehrt.
Wenn wir !
zweimal verwenden !!
wird ein normaler Wert in einen booleschen Wert umgewandelt. Also !""
gibt false
zurück.
+!![]
-Arrays sind alle wahre Werte, auch leere Arrays. Also wird !![]
true
zurückgeben.
!![]; // -> true
und das +
-Zeichen wandelt den wahren Wert in seine numerische Darstellung um: 1
, also gibt +!![]
1
zurück.
true == „true“
Der Gleichheitsoperator (==) prüft, ob seine beiden Operanden gleich sind und gibt ein boolesches Ergebnis zurück.
Nach den abstrakten Gleichheitsvergleichsregeln werden beim Vergleich beide Werte in Zahlen umgewandelt.
true == "true" ==> Number(true) == Number("true") ==> 1 == NaN
Also gibt ture =="true"
false zurück.
010 - 03
Hier ist ein kleiner Trick: Wenn eine Zahl mit 0
beginnt, wird sie in JavaScript als Oktalzahl behandelt. Also:
010 - 03 ==> 8 - 3 ==> 5
Außerdem:
„“--““
Dies scheint eine schlechte Syntax zu sein, funktioniert aber gut.
Der leere String kann in den booleschen Wert false oder den numerischen Wert 0 konvertiert werden. Also ist -""
0
null + 0
Wie bereits erwähnt, ist null
ein virtueller Wert. Es wird in den booleschen Wert false
oder den numerischen Wert 0
konvertiert. Das Ergebnis gibt also 0
zurück.
0/0
Dies ist ein illegaler mathematischer Ausdruck. Die Gleichung 0/0 hat keine sinnvolle numerische Antwort, die Ausgabe ist nur NaN
.
1/0 === 10 1000**
Obwohl 1/0
nach wie vor ein illegaler mathematischer Ausdruck ist. Wenn der Divisor jedoch nicht 0
ist, geht JavaScript davon aus, dass das Ergebnis dieses Ausdrucks Infinity
ist.
Und 10**1000
ist eine große Zahl, und JS kann diese Zahl nicht korrekt darstellen. (Der höchste ganzzahlige Wert in JavaScript ist 2^53-1
). 10 * 1000
gilt also auch als Unendlich.
Unendlich ist immer gleich einer anderen Unendlichkeit, also gibt 1/0 === 10 ** 1000
true zurück.
true++
Daran ist nichts Besonderes, es handelt sich lediglich um einen Syntaxfehler.
""- 1Während
der Additionsoperator (+) sowohl für Zahlen als auch für Zeichenfolgen funktioniert, ist der Subtraktionsoperator (-) für Zeichenfolgen nicht nützlich, sodass JavaScript ihn als Operation zwischen Zahlen interpretiert. Eine leere Zeichenfolge wird durch Typumwandlung auf 0 gesetzt.
"" - 1 ==> Number("") - 1 ==> 0 - 1 ==> -1
also gibt "" — 1
-1
(null - 1) - "1"
wie oben zurück.
null ==> 0 (null - 1) ==> -1 „1“ ==> 1
also (null — 1) — “1”
gibt -2
38 4343 2342+ („true“ – 0)
zurückSie könnten vermuten, dass JS so verrückt ist, dass es die Zeichenfolge „true“ in eine Zahl umwandelt Darstellung des booleschen Werts true. Allerdings ist es nicht so verrückt. Tatsächlich wird versucht, die Zeichenfolge in eine Zahl umzuwandeln, was jedoch fehlschlägt.
Number("true"); // -> NaN
Bei numerischen JavaScript-Operationen muss das Endergebnis der Operation NaN sein, solange ein Wert NaN ist. 38 * 4343 * 2342
ist nur ein Vorwand.
5 + !5 + !!5
wie oben angegeben.
Also:
!5 ==> 0 !!5 ==> 1
[] + [1] + 2
Beim Versuch, den Additionsoperator (+) zwischen Arrays zu verwenden, werden diese in Strings umgewandelt.
[] ==> '' [1] ==> '1' [] + [1] ==> '1' '1' + 2 ==> '12',
also ist das Ergebnis '12'.
1 + 2 + „3“
JavaScript führt diese Operationen von links nach rechts aus. Wenn die Zahl 3 zur Zeichenfolge 3 hinzugefügt wird, hat die Zeichenfolgenverkettung Vorrang.
1 + 2; // -> 3 3 + „3“; // -> „33“
Ehrlich gesagt stellen diese Herausforderungen keinen Wert für unsere Programmierfähigkeiten dar, sodass diese Art von Code nicht in echten Projekten geschrieben werden sollte
. Betrachten Sie diese Fähigkeiten jedoch als Freunde Ist es nicht eine sehr interessante Sache, vor Kollegen so zu tun, als wäre man 13?
Autor: Marina Mosti
Quelle: mittel
Originaltext: https://medium.com/frontend-canteen/20-useless-but-funny-challange-for-javascript-develor-9eea39bb8efb
[Empfehlungen für verwandte Video-Tutorials: Web-Frontend]
Die oben genannten sind 20 seltsame JS-Ausdrücke , erraten Sie das Ausgabeergebnis! Weitere Informationen finden Sie in anderen verwandten Artikeln auf der chinesischen PHP-Website!