Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript中的以下逻辑if或语句有什么问题?_Javascript - Fatal编程技术网

javascript中的以下逻辑if或语句有什么问题?

javascript中的以下逻辑if或语句有什么问题?,javascript,Javascript,我是javascript新手,它必须非常基本: if (controllerName === ('about' || 'contact' || 'lessons')) { res.render(controllerName + '.ejs', locals); } 只有当controllerName=='about'我进去时,其余的案例我不进去 在这种情况下,或和=如何工作?您的结构不正确。解决办法是 if (controllerName == 'about' || c

我是javascript新手,它必须非常基本:

if (controllerName === ('about' || 'contact' || 'lessons')) {
        res.render(controllerName + '.ejs', locals);
    }
只有当
controllerName=='about'
我进去时,其余的案例我不进去


在这种情况下,
=
如何工作?

您的结构不正确。解决办法是

if (controllerName == 'about' || controllerName == 'contact' || controllerName == 'lessons') {
    res.render(controllerName + '.ejs', locals);
}

问题是
('about'| |'contact'| |'lessons')
的计算结果为
about
,因为它是集合中的第一个非-(null/未定义)值。您似乎想将
controllerName
与所有三个值进行比较,因此请注意我的代码版本如何将
controllerName
分别与所有三个值进行比较。

逻辑OR运算符的工作方式与您使用的略有不同。解决办法是:

if(controllerName === 'about' || 
   controllerName === 'contact' ||
   controllerName === 'lessons')
或者,如果你想让眼睛更舒服一点:

if((['about','contact','lessons']).indexOf(controllerName) > -1)
第一个语句的问题是
('about'| |'contact'| |'lessons')
将返回计算结果为
true
的第一个表达式。由于任何转换为布尔值的非空字符串的计算结果都将为
true
,因此始终返回“about”。因此,您的原始声明相当于:

if(controllerName === 'about')

更简洁的修复方法可以使用正则表达式:

if (/^(about|contact|lessons)$/.test(controllerName)) { ... }

javascript解释器不会为您执行分解。条件表达式是显式的,而不是惯用的。你需要独立地评估每一个。在你的脑海中说“控制员姓名等于或接触或课程”是很有道理的,但是这个表达需要你把它完全解释清楚。@jbabey我不知道这就是所谓的德摩根斯定律。感谢您的琐事。-0.49提及w3schools。
|
表示如果左侧的表达式为truthy,请返回它。否则返回右边的表达式。这就是它所做的。不知道人们讨厌学校。这是一些有趣的东西,所以我将其删除。感谢@AlexWayne澄清
|
。我更新了我的答案,因为现在学校变得太主流了。我甚至会为这种很难找到详细信息的基础知识辩护,直到我看到他们在那页上使用的可怕的缩进。Gawsh.或者更具体地说,
/^(关于|联系|课程)$/
,因此它不会匹配
联系_01
之类的内容。