2011-10-05 15 views
6

(true)weird conditionであるとJSLintが訴えています。私が逆のswitch文でそれを使用していなかったのは分かります。 JSLintは間違っているか、逆のswitch文を使用しないでください。逆のスイッチ文が使用できますか?JavaScript?

ありがとうございました。

switch (true) { 
    case (menuLinksLength < 4): 
     numberOfColumns = 1; 
     break; 
    case (menuLinksLength > 3 && menuLinksLength < 7): 
     numberOfColumns = 2; 
     break; 
    case (menuLinksLength > 6 && menuLinksLength < 10): 
     numberOfColumns = 3; 
     break; 
    case (menuLinksLength > 9): 
     numberOfColumns = 4; 
     break; 
    default: 
     numberOfColumns = 0; 
} 
+0

これは価値のあることですが、switch文をそのままにして、 'switch(true === true)'を使うとlinterを満足させることができます。これは練習を推奨するものではありません; –

+0

'switch(true === true)'は助けにはならないので、 "奇妙な関係"について文句を言うようになります。 –

+0

var theTruth = true; ----- switch(theTruth){...} – dbrin

答えて

3

(Firefoxの1.0以降、Google Chromeの1.0+、MSIE 5.5以降などでサポートされている)ECMA-262規格の第3版が

switch (expression) { 
    case label1: 
     statements1 
    . 
    . 
    . 
} 

statements1(expression)であればマッチlabel1を実行することを定義します。

これは、お客様のswitchステートメントが完全に正常であることを意味します。

Firefox、Chrome、IEで試しました。どれも文句を言いません...

編集:今

推測一部:

JSLintは、コードanaylisisツールです。 switch (true)が表示されたら、自分が何をしているのか分からないと仮定します。 奇妙なは個人的に私は、コードベースにswitchを逆転見て好きではないだろう...必ずしも

+2

私が問題を引き起こしている理由は、私が自分のビルドスクリプトで使用する会社で、JSLintが '奇妙な'を返すと失敗するからです。エラーがJSLintにどのように分類されているのか分かりませんが、それは間違いではないかもしれないと思います。助けてくれてありがとう。 – moefinley

+0

このチェックを無効にする方法はありませんか? –

+0

@Danny:いいえ。私はJSLintを使ったことがありません。 – Dennis

5

間違っを意味するものではありません。それは普通のif/elseifブロックと比べてあなたに何も買わないし、そのエキゾチックな性質は混乱の原因となる可能性がある。あなたは異例の何かをやっている

:JSLintが文句を言っているものもあります

。それには正当な理由はありますか? でない場合は、基本に固執する方が良いかもしれません。

+5

私はそれがすべて個人的に好みであることを知っています。しかし、私は個人的には、if文の大部分がはるかに面倒であると感じています。 – moefinley

+0

しかし、それはJSLintの全体のポイントです。それは違法なコードだけでなく、コーディングの慣習が貧弱であることをアドバイスします。そして、この「反転スイッチ」は、「賢い」コード(*、*将来の変更がおそらく中断され、特に読めるわけではないコード)の素晴らしい例です。 –

関連する問題