web-dev-qa-db-ja.com

JavaScript switchステートメントで厳密な比較を想定しても安全ですか?

ブール値falseまたは整数(0を含む)のいずれかになる変数があります。次のようなswitchステートメントに入れたいです。

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

Google Chromeでのテストでは完全に機能するようですが、一部のブラウザーではmy_varfalseの場合、実行されるのではないかと心配しているため、使用するのが少し緊張しています0 == false以降の最初のケース。

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

103
Paul

ECMA 262、セクション12.11 、2番目のアルゴリズム、4.cを見てください。

c。入力が===演算子で定義されているClauseSelectorと等しい場合、...

99

http://qfox.nl/notes/11 は質問に答えます。 (この男はJavaScriptの核心について多くのことを知っています)

JavaScriptのスイッチは、厳密な型チェック(===)を使用します。したがって、強制を心配する必要はありません。これにより、いくつかのwtfjsが防止されます。一方、強制を頼りにしている場合、それを強制することはできないため、不運です。

34
Halcyon

はい、switch "[厳密な比較を使用]、=== "。

ソース: switch-JavaScript | MDN

1
ma11hew28