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