Javascript OR 运算符在 if 语句中不起作用

Javascript OR operator not working in if statement

如果星期几与我的声明中列出的任何一天相匹配,我试图让这个 Javascript 做一些事情,并将其限制在 17:00 和 19:00 小时,但是 OR 运算符没有像我预期的那样工作,我是 JS 新手,我想知道我是否误解了这个运算符的使用。如果我只为一周中的某一天列出一个值,而不是像我的示例中那样列出 3 个值,那么代码会如我所愿地工作。

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 
} 

在这种情况下,您最好使用范围检查,因为您只需要对三个或更多个进行两次比较 - 而且它更易于维护,如有必要,只需更改一个值。

if (dayOfWeek >= 4 && dayOfWeek <= 6 && hour >= 17 && hour < 19) {

正确的 OR 条件需要括号,因为 &&precedence 大于 ||

if ((dayOfWeek == 4 || dayOfWeek == 5 || dayOfWeek == 6) && hour >= 17 && hour < 19 ) {

你的if条件应该是:

if ( (dayOfWeek == 4 || dayOfWeek == 5 || dayOfWeek == 6) && hour >= 17 && hour < 19 ){
    // do stuff
  } else {
    // do other stuff 
} 

var d = new Date();
var dayOfWeek = d.getDay(); // 0 = Sunday
var hour = d.getHours();

if ( (dayOfWeek == 4 || dayOfWeek == 5 || dayOfWeek == 6) && (hour >= 17 && hour < 19) ){
    // do stuff
    console.log("true");
  } else {
    // do other stuff 
    console.log("false");
}

您需要使用 dayOfWeek,但您也可以限制需要执行的检查数量....

var d = new Date();
var dayOfWeek = d.getDay(); // 0 = Sunday
var hour = d.getHours();

if ( (dayOfWeek >= 4 && dayOfWeek <= 6) && (hour>=17 && hour < 19))
{
  // do stuff
}
else
{
  // doo other stuff
}

像这样更正,

var d = new Date();
var dayOfWeek = d.getDay(); // 0 = Sunday
var hour = d.getHours();

if ( (dayOfWeek == 4 || 5 || 6) && (hour >= 17 && hour < 19) ){
    console.log("if")
  } else {
    console.log("else")
}

只是为了发布另一种可能性,如果您有动态输入,您可能需要使用 array 并使用 indexOf 检查列表中是否存在这一天:

var d = new Date();
var dayOfWeek = d.getDay(); // 0 = Sunday
var hour = d.getHours();

if ( [4,5,6].indexOf(dayOfWeek) > -1 && hour >= 17 && hour < 19 ){
    // do stuff
  } else {
    // do other stuff 
}

https://jsfiddle.net/hnzzfnot/1/