Javascript 为什么我需要使用&&;而不是下面的if语句中的| |?

Javascript 为什么我需要使用&&;而不是下面的if语句中的| |?,javascript,if-statement,Javascript,If Statement,我想我必须这么做: if (building.floorplan || selectedCategory !== 'outdoor') { // run code } (如果建筑有平面布置图或所选类别不是室外,请运行代码。) 但事实证明,该代码只适用于&&: if (building.floorplan && selectedCategory !== 'outdoor') { // run code } (如果建筑有平面布置图且所选类别不是室外,则运行代码。) 第一个

我想我必须这么做:

if (building.floorplan || selectedCategory !== 'outdoor') {
  // run code
}
(如果建筑有平面布置图或所选类别不是室外,请运行代码。)

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

if (building.floorplan && selectedCategory !== 'outdoor') {
  // run code
}
(如果建筑有平面布置图且所选类别不是室外,则运行代码。)

第一个案例不也应该运行代码吗?如果有平面布置图或所选类别不在室外,条件是否满足

如果建筑有平面布置图或选择了 类别不是户外的

如果使用OR
|
运算符,则表示如果第一个运算符为真,则无需向前看

所以

如果
建筑,则不会超出第一个条件。楼层平面图
没有错误

另一方面,如果您使用AND
&&
,那么您的意思是,如果第一个是false,那么就不需要向前看

所以

如果建筑平面图不真实,则不会超出第一个条件

第一个案例不也应该运行代码吗?既然条件满足 如果有平面布置图或所选类别不在室外


第一种情况是检查是否存在
平面布置图
,然后无需查看下一种情况。因此,-第一个条件不会像上面解释的那样起作用。

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

单从代码无法理解这一事实表明,一些更具表现力的代码应该是当今的主流。未来的开发人员会发现很难出现,并且一眼就能理解假值代表什么-是
还是
“没有平面布置图”
还是
“没有人有平面布置图”
,等等

我想提出如下建议:

if(build.floorplan !== "" || selectCategory !== "outdoor") {...}
真正的比较取决于特定应用程序的上下文

或者,向build对象添加一个方法,类似于执行检查的
hasFloor
,这样您的方法可以重写为:

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

就个人而言,除非它是bool类型,否则我将显式地签入我的条件句,特别是在像JS这样的语言中

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

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

第一个应该有效。“.floorplan”的类型是什么?如果任一条件的计算结果为true,则将运行第一条语句。如果两个条件的计算结果都为true,则将运行第二条语句。是的,这意味着如果第二个有效,第一个永远有效。这是两个根本不同的表达方式。因此,如果没有任何进一步的上下文,就不可能说出为什么需要使用一个而不是另一个。但是,是的,OR case会在AND case运行时运行,但要宽松得多,所以它也会在AND case不运行的情况下运行。@Chris它是一个
字符串
。当我不确定运算符优先级时,我总是使用括号强制执行我想要的优先级。我几乎总是这样做,因为它提供了更可读的代码
if(build.hasFloorplan() || selectCategory !== "outdoor") {...}
if ((building.floorplan == selectedCategory) && (selectedCategory != 'outdoor')){ 
    //code goes here
}