Frage Javascript Leerer String Vergleich


Ich verstehe nicht, warum ein Szenario falsch und das andere wahr ist.

Szenario 1:

> '' == ''
true

Szenario 2:

> '' == ('' || undefined)
false

Wird in Szenario 2 nicht gefragt, ob (leere Zeichenfolge) gleich ist: (leere Zeichenfolge) ODER undefiniert?

Ich bin mir sicher, dass ich hier etwas Grundlegendes vermisse, was ich wirklich herausfinden möchte. Ich kann das leicht programmieren, aber ich würde gerne lernen Warum Es passiert ... für das nächste Mal, weißt du?


5
2018-05-21 19:23


Ursprung


Antworten:


'' == ( '' || undefined )

Ist nicht das Gleiche wie

( '' == '' ) || ( '' == undefined )

Es ist mehr in Richtung:

var foo = '' || undefined; // Results in undefined

Und dann vergleichen foo zu einer leeren Zeichenfolge:

foo == ''; // undefined == '' will result in false

Erläuterung

Das logische || ist ein Kurzschließer. Wenn das Argument zu seiner Linken ist truthyDas Argument rechts wird nicht einmal ausgewertet. In JavaScript, '' gilt nicht als sein truthy:

if ( '' ) console.log( 'Empty Strings are True?' );

So wie undefined wird zurückgegeben und mit einer leeren Zeichenfolge verglichen. Wenn Sie diese Logik innerhalb einer Klammer ausführen, wird die '' und das undefined Ich weiß nichts über die bevorstehende Gleichheitsprüfung, die darauf wartet, zu passieren - sie wollen nur wissen, welche von ihnen diese Bewertung überleben wird.


10
2018-05-21 19:26



Lass es uns brechen:

'' == ('' || undefined) // return "undefined"
'' == undefined // false

|| gib den ersten wahren Wert oder die letzter Wert.

DEMO

Du willst das:

'' == undefined  || '' == false

undefined ist == nur um nullund nicht zu allen anderen "falschen" Werten:

  • 0
  • "" - leerer String
  • NaN
  • falsch

2
2018-05-21 19:27



Versuchen '' == '' || '' == undefined

Wie in fast allen Programmiersprachen müssen die Ausdrücke auf beiden Seiten eines Operators zu einem gültigen Operanden ausgewertet werden. || ist ein logischer ODER-Operator, mit dem ein Paar boolescher Operanden ausgewertet wird.


1
2018-05-21 19:27