Apakah aman untuk mengasumsikan perbandingan ketat dalam pernyataan sakelar JavaScript?

105

Saya memiliki variabel yang dapat berupa boolean false, atau integer (termasuk 0). Saya ingin memasukkannya ke dalam pernyataan switch seperti:

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

Dalam pengujian saya di Google Chrome, tampaknya berfungsi dengan sempurna, tetapi saya sedikit gugup untuk menggunakannya karena saya takut di beberapa browser, jika my_varada false, ini mungkin menjalankan kasus pertama sejak itu 0 == false.

Saya hanya ingin tahu apakah ada sesuatu yang resmi di JavaScript yang mengatakan pernyataan switch akan menggunakan perbandingan ketat seperti itu 0 !== false, tetapi saya tidak dapat menemukan apa pun sendiri, dan saya tidak yakin apakah ini akan berfungsi dengan baik di mesin JavaScript yang berbeda. Adakah yang tahu jika perbandingan yang dilakukan oleh pernyataan switch dijamin ketat?

Paul
sumber

Jawaban:

103

Lihat ECMA 262, bagian 12.11 , algoritma kedua, 4.c.

c. Jika input sama dengan clauseSelector seperti yang didefinisikan oleh operator ===, maka ...

Federico Lebrón
sumber
11
Sudah berpesta seperti itu sejak 1999 (halaman 68, s. 12.11, CaseBlock # 3)
Walf
Lalu apa? Saya tidak yakin mengapa Anda memotong kutipan di sini.
Oleg V. Volkov
34

http://qfox.nl/notes/110 menjawab pertanyaan Anda. (Orang ini tahu banyak tentang seluk beluk JavaScript)

Sakelar di Javascript menggunakan pemeriksaan tipe ketat (===). Jadi Anda tidak perlu khawatir tentang paksaan, yang mencegah beberapa wtfjs :). Di sisi lain, jika Anda mengandalkan paksaan, sial karena Anda tidak bisa memaksanya.

Tenang
sumber
jsfiddle.net/to469fLm/4 , Anda dapat menggeneralisasi fungsi pemaksaan untuk mencapai kebutuhan Anda
darethas