私はjavascriptが初めてなので、非常に基本的なものでなければなりません:
if (controllerName === ('about' || 'contact' || 'lessons')) {
res.render(controllerName + '.ejs', locals);
}
中に入るときだけcontrollerName=='about'
、残りの場合は入りません。
この場合、 とはどのようにor
動作===
しますか?
私は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);
}
問題は、セット内の最初の非 (null/未定義) 値であるため、 に('about' || 'contact' || 'lessons')
評価されることでした。about
3 つの値すべてを比較したいように見えるcontrollerName
ので、コードの私のバージョンがcontrollerName
3 つの値すべてを個別に比較する方法に注意してください。
より簡潔な修正では、正規表現を使用できます。
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')