2

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

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

只有当controllerName=='about'我进去的时候,其余的情况我不进去。

or===在这种情况下如何操作?

4

3 回答 3

7

你结构不正确。一个修复将是

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

问题在于,它是集合中的第一个非(null/undefined)('about' || 'contact' || 'lessons')about。您似乎想与controllerName所有三个值进行比较,因此请注意我的代码版本如何controllerName分别与所有三个值进行比较。

于 2012-11-20T20:32:05.227 回答
5

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

if (/^(about|contact|lessons)$/.test(controllerName)) { ... }
于 2012-11-20T20:35:30.250 回答
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')
于 2012-11-20T20:32:21.310 回答