繁体   English   中英

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

[英]What is wrong with the following logical if or statement in javascript?

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

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

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

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

你的结构不正确。 修复就是

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

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

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

if (/^(about|contact|lessons)$/.test(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')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM