2016-11-13 5 views
0

Die else-Anweisung unten wird nie ausgeführt, selbst wenn die if-Anweisung falsch ist. Ich denke, ich habe einen sehr grundlegenden Fehler gemacht, kann aber nicht herausfinden, was.Weird if-else Verhalten Javascript

var a = ["king","queen","100"]; 
    for (var i=0; i<a.length; i++) { 
     if (a[i] === "king" || "queen"){ 
      console.log("monarch"); 
     } 
     else { 
      console.log("The number is: "+ parseInt(a[i])); 
     } 
    } 
// This prints out "monarch" 3 times 
+2

„Königin“ ein truthy Wert ist. Tun Sie dies 'a [i] === "König" || a [i] === "queen" ' –

+0

danke es funktionierte, aber sollte nicht König und Königin für ein falsch sein [2] –

+0

Ja' a [2] === "König" || a [2] === "Königin" ist "falsch". –

Antwort

1

Sollten sein:

var a = ["king","queen","100"]; 
for (var i=0; i<a.length; i++) { 
    if (a[i] === "king" || a[i] === "queen"){ 
     console.log("monarch"); 
    } 
    else { 
     console.log("The number is: "+ parseInt(a[i])); 
    } 
} 

Sie Ihren boolean Ausdruck die Art und Weise schreiben wir eine gesprochene Sprache, sprechen würden "entweder A 1 oder 2". So wird die OR interpretiert.

Entweder die linke Seite der OR ist true: a[i] === "king" ist true; oder die rechte Seite der OR ist true: "queen". Es bewertet die Zeichenfolge selbst, und die Zeichenfolge "queen" ist nicht null, daher wird true ausgewertet.

+1

also meinst du die Art und Weise wie Javascript die Bedingung überprüft: entweder a [i] = "König" oder "Königin" in welchem ​​Fall für a [2] das if a [2] = " König "ist falsch, aber wenn die einzige (" Königin ") immer noch richtig ist, richtig? –

+1

@BijayTimilsina genau! –

+1

@TiagoMarinho - nette Bearbeitungen, danke für die zusätzliche Erläuterung. – Joe

0

Du musst deine beiden Bedingungen separat mit || wie folgt machen: a[i] === "king" || a[i] === "queen"