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?
'' == ( '' || 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.
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 null
und nicht zu allen anderen "falschen" Werten:
- 0
- "" - leerer String
- NaN
- falsch
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.