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/未定義) 値であるため、 に('about' || 'contact' || 'lessons')評価されることでした。about3 つの値すべてを比較したいように見えるcontrollerNameので、コードの私のバージョンがcontrollerName3 つの値すべてを個別に比較する方法に注意してください。

于 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 に答える