Javascript ODER Betreiber nicht in der if-Anweisung
Ich versuche, dieses Javascript etwas zu tun, wenn der Tag der Woche entspricht einem der Tage aufgeführt, in meine Aussage, als auch die Beschränkung auf zwischen 17:00 und 19:00 Uhr, aber der ODER die Betreiber nicht so funktioniert, wie ich erwartet hatte, ich bin neu in JS und ich Frage mich, ob ich bin Missverständnis die Verwendung dieses operators. Wenn ich auf der Liste einen Wert für nur einen Tag in der Woche, statt 3 wie in meinem Beispiel, der code funktioniert wie ich es mir erhofft hatte.
var d = new Date();
var dayOfWeek = d.getDay(); //0 = Sunday
var hour = d.getHours();
if ( dayOfWeek == 4 || 5 || 6 && hour >= 17 && hour < 19 ){
//do stuff
} else {
//do other stuff
}
- Verwenden Sie es falsch, wird es sein:
if ( dayOfWeek == 4 || dayOfWeek == 5 || dayOfWeek == 6 && hour >= 17 && hour < 19 ) {
dayOfWeek == 4 || 5 || 6
ungültig ist in javascript, die Sie wahrscheinlich wollen:[4,5,6].indexOf(dayOfWeek) > -1 && hour >= 17 && hour <19
-> beachten Sie, dass dieser Ansatz etwas anders (über ein array).- Formulieren Sie die Bedingung für jede Bedingung!
- Was denken ließ
Array#indexOf
? #Amazing - es ist einfacher und schneller zu Lesen. Auch, es ist mehr mantainable wenn Sie jemals daran denken, die "sourcedays" generiert wird dinamically (entweder von einer externen Quelle, entweder aus einer Berechnung). Ich bin eher am überlegen, ob ich der einzige bin, aber über dieses, ich hasse es zu schreiben 3 Zustand Aussagen, wenn Sie können zusammengefasst werden in einer einzigen Zeile ein 😛
dayOfWeek == 4
== true oder false. In der Erwägung, dassdayOfWeek == 4 || 5
ergibt true oder 5. In der Erwägung, dassdayOfWeek == 4 || 5 || 6
noch Ertrag true oder 5. Es muss nicht tun, was Sie wollen.- Yeah! Gut, haben kürzere und nicht-repetitive code 🙂
- Mögliche Duplikate von Oder operator nicht in der IF-Anweisung Node.js
Du musst angemeldet sein, um einen Kommentar abzugeben.
In diesem Fall verwenden Sie besser einen range-check, da brauchst du nur zwei Vergleiche gegen drei oder mehr - und es ist besser maintanable, nur um einen Wert zu ändern, wenn nötig.
Rechts ODER Bedingungen bedürfen der Klammer, weil der Vorrang von
&&
über||
Nur für die Zwecke der Entsendung eine andere Möglichkeit, wenn Sie jemals haben wird, ein dynamisches input, den Sie verwenden möchten, können Sie eine
array
und verwendenindexOf
zu überprüfen, ob der Tag in der Liste vorhanden ist:https://jsfiddle.net/hnzzfnot/1/
Müssen Sie
dayOfWeek
aber Sie können auch begrenzen die Menge der Prüfungen, die Sie tun müssen....JS:
If-Bedingung sollte sein:
Korrigieren Sie es so,
(dayOfWeek == 4 || 5 || 6)
funktioniert nicht richtig, es wird immer true zurückgegeben wird (siehe Rangfolge der developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/...). Zuerst die==
ausgewertet wird (die gibttrue
nur, wenndayOfWeek = 4
), wenn es zurückfalse
der ganze Ausdruck gibt5
die, wenn Sie ausgewertet, wie die booleschen Werte wahr ist. Also egal, der Wert vondayOfWeek
erhalten Sie immertrue
aus(dayOfWeek == 4 || 5 || 6)
.