为什么我需要使用&&而不是||在以下if语句中?

时间:2016-04-18 10:30:04

标签: javascript if-statement

我以为我必须这样做:

if (building.floorplan || selectedCategory !== 'outdoor') {
  // run code
}

(如果建筑物有平面布置图或者所选类别不在室外,则运行代码。)

但事实证明,该代码仅适用于&&

if (building.floorplan && selectedCategory !== 'outdoor') {
  // run code
}

(如果建筑物有平面布置图并且所选类别不在室外,则运行代码。)

第一种情况是不是也要运行代码?如果条件满足,如果有平面图或所选类别不在室外吗?

3 个答案:

答案 0 :(得分:4)

  

如果建筑物有平面布置图或者如果选择了建筑物,则运行代码   类别不是户外。

如果您使用OR ||运算符,那么您说如果第一个运算符为真,则无需向前看。

所以,

if (building.floorplan || selectedCategory !== 'outdoor') {
  // run code
}
如果building.floorplan不是假的,

将不会超出第一个条件。

另一方面,如果您使用AND &&,那么您说如果第一个是假的,则无需向前看

所以,

if (building.floorplan && selectedCategory !== 'outdoor') {
  // run code
}

如果building.floorplan不真实,

将不会超越第一个条件。

  

第一种情况是不是也要运行代码?由于条件满足   如果有平面图或所选类别不在户外?

第一种情况是检查是否有floorplan,然后无需查看下一个条件。因此, - 第一个条件将无法正常工作。

答案 1 :(得分:1)

我怀疑这与type所属的.floorplan有关。正如您在问题下方的评论中所提到的,floorplan是一个字符串。

从代码中无法理解的事实表明,一些更具表现力的代码应该是当天的顺序。未来的开发人员会发现难以出现,并且一眼就能理解错误值代表什么 - 是""还是"no floorplan"还是"ain't no body got a floorplan"等等。

我会建议像:

if(build.floorplan !== "" || selectCategory !== "outdoor") {...}

真正的比较将取决于您的特定应用程序的上下文。

或者,在构建对象中添加一个方法,例如hasFloor来执行检查,因此可以将方法重写为:

if(build.hasFloorplan() || selectCategory !== "outdoor") {...}

就个人而言,除非它是bool类型,否则我将明确检查我的条件,特别是像JS这样的语言。

答案 2 :(得分:0)

如果您需要假设这两个变量不等于室外,请执行以下操作:

if ((building.floorplan == selectedCategory) && (selectedCategory != 'outdoor')){ 
    //code goes here
}