74

私はブール値false、または整数(0を含む)のいずれかの変数を持っています。私は以下のようにswitch文の中に入れたい:GoogleのChromeで私のテストではJavaScript switch文で厳密な比較を行うのは安全ですか?

switch(my_var){ 
    case 0: 
     // Do something 
     break; 
    case 1: 
     // Do something else 
     break; 
    case false: 
     // Some other code 
} 

、完璧に動作しているようですが、私は怖いので、それを使うには少し緊張していますその一部のブラウザではmy_varfalseの場合、0 == false以降の最初のケースを実行する可能性があります。

私は、スイッチのステートメントが0 !== falseというような厳密な比較を使用するというJavaScriptの公式があるかどうか疑問に思っていますが、私自身は何も見つかりませんでした。これがうまくいくかどうかわかりません異なるJavaScriptエンジンswitch文で行われた比較が厳密であることが保証されているかどうかは誰にも分かりますか?

答えて

71

ECMA 262, section 12.11、第2のアルゴリズム、4.c.を見てください。

cです。入力は===演算子によって定義されているようclauseSelectorに等しい場合、...

+5

それは[それは1999年以来そのようなパーティーされている](http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition、 %20December%201999.pdf)(page 68、s。12.11、CaseBlock#3) – Walf

25

http://qfox.nl/notes/110答えます。 (この男はJavaScriptの根っからの部分についてたくさんのことを知っています)

Javascriptのスイッチで厳密な型チェック(===)を使用します。だからあなたは決して 強制的に、いくつかのwtfjsを防ぐために心配する必要があります:)。 他の手であなたが強奪に頼っていた場合は、あなたがすることができないので、厳しい運は 強制的に。

+0

https://jsfiddle.net/to469fLm/4/、あなたは可能性あなたのニーズを達成するために強制機能を一般化する – darethas

33

はそれを試してみてください。

switch(1) { 
    case '1': 
    alert('Switch comparison is NOT strict.'); 
    break; 
    case 1: 
    alert('Switch comparison is strict.'); 
    break; 
    default: 
    alert('Huh?'); 
} 
+6

一言、私は決してdownvotesに慣れることはありません。 –

+15

さて、私がdownvotesを取得している理由は、この質問に答えるには、JavaScriptアプリやライブラリを実行する可能性のあるすべてのJavaScriptエンジンで試してみる必要があります。しかし、私はコア機能をテストすることも大好きです。ドキュメントがどれほど権威あるものであっても、すべての主要な実装が準拠していることを実際に保証することはできません。最も確実な方法は、テストすることです。 –

+1

私はあなたの右のテストが重要であるので、2番目のコメントをupvoted。開発者としては、特定のブラウザセット、つまりテスト済みのコードで作業するためのコードを作成します。 OTOH、権威ある文書に頼ることができないのであれば、stackoverflow.comのポイントは何ですか? (そしてあなたが信用を得ることはできなくても、うまくいけば、もう一回upvoteがあなたの日を作るでしょう。)(あなたはすでに私よりも信じています。 –

関連する問題