我是javascript的新手,它必须非常基础:
if (controllerName === ('about' || 'contact' || 'lessons')) {
res.render(controllerName + '.ejs', locals);
}
只有在controllerName=='about'
我进去的时候,其余的情况我都没有。
在这种情况下,or
和===
如何运作?
答案 0 :(得分:7)
您的结构不正确。修复将是
if (controllerName == 'about' || controllerName == 'contact' || controllerName == 'lessons') {
res.render(controllerName + '.ejs', locals);
}
问题是('about' || 'contact' || 'lessons')
求值为about
,因为它是集合中的第一个非(null / undefined)值。您似乎想要将controllerName
与所有三个值进行比较,请注意我的代码版本如何将controllerName
分别与所有三个值进行比较。
答案 1 :(得分:5)
更简洁的修复可以使用正则表达式:
if (/^(about|contact|lessons)$/.test(controllerName)) { ... }
答案 2 :(得分:4)
逻辑OR运算符的工作方式与您使用它的方式略有不同。修复将是:
if(controllerName === 'about' ||
controllerName === 'contact' ||
controllerName === 'lessons')
或者,如果你想让眼睛看起来更容易一些:
if((['about','contact','lessons']).indexOf(controllerName) > -1)
第一个语句的问题是('about' || 'contact' || 'lessons')
将返回第一个求值为true
的表达式。由于强制转换为布尔值的任何非空字符串将计算为true
,因此始终返回“about”。因此,您的原始陈述相当于:
if(controllerName === 'about')