Pernyataan switch
dapat menggantikan beberapa pemeriksaan if
.
Ini memberikan cara yang lebih deskriptif untuk membandingkan nilai dengan beberapa varian.
switch
memiliki satu atau lebih blok case
dan default opsional.
Ini terlihat seperti ini:
beralih(x) { kasus 'nilai1': // jika (x === 'nilai1') ... [merusak] kasus 'nilai2': // jika (x === 'nilai2') ... [merusak] bawaan: ... [merusak] }
Nilai x
diperiksa untuk persamaan yang ketat dengan nilai dari case
pertama (yaitu, value1
) lalu ke kasus kedua ( value2
) dan seterusnya.
Jika persamaan ditemukan, switch
mulai mengeksekusi kode mulai dari case
yang sesuai, hingga break
terdekat (atau hingga akhir switch
).
Jika tidak ada case yang cocok maka kode default
akan dieksekusi (jika ada).
Contoh switch
(kode yang dieksekusi disorot):
misalkan a = 2 + 2; saklar (a) { kasus 3: alert('Terlalu kecil'); merusak; kasus 4: alert('Tepat sekali!'); merusak; kasus 5: alert('Terlalu Besar'); merusak; bawaan: alert("Saya tidak tahu nilai-nilai tersebut"); }
Di sini switch
mulai membandingkan a
dari varian case
pertama yaitu 3
. Pertandingan gagal.
Lalu 4
. Itu match, jadi eksekusinya dimulai dari case 4
sampai break
terdekat.
Jika tidak ada break
maka eksekusi dilanjutkan ke case
berikutnya tanpa ada pengecekan apapun.
Contoh tanpa break
:
misalkan a = 2 + 2; saklar (a) { kasus 3: alert('Terlalu kecil'); kasus 4: alert('Tepat sekali!'); kasus 5: alert('Terlalu Besar'); bawaan: alert("Saya tidak tahu nilai-nilai tersebut"); }
Pada contoh di atas kita akan melihat eksekusi berurutan dari tiga alert
:
alert('Tepat sekali!'); alert('Terlalu Besar'); alert("Saya tidak tahu nilai-nilai tersebut");
Ekspresi apa pun bisa menjadi argumen switch/case
switch
dan case
mengizinkan ekspresi arbitrer.
Misalnya:
misalkan a = "1"; misalkan b = 0; saklar (+a) { kasus b+1: alert("ini berjalan, karena +a adalah 1, sama persis dengan b+1"); merusak; bawaan: alert("ini tidak berjalan"); }
Di sini +a
memberi 1
, itu dibandingkan dengan b + 1
dalam case
, dan kode yang sesuai dieksekusi.
Beberapa varian case
yang memiliki kode yang sama dapat dikelompokkan.
Misalnya, jika kita ingin kode yang sama dijalankan untuk case 3
dan case 5
:
misalkan a = 3; saklar (a) { kasus 4: waspada('Benar!'); merusak; kasus 3: // (*) mengelompokkan dua kasus kasus 5: waspada('Salah!'); alert("Mengapa kamu tidak mengambil kelas matematika?"); merusak; bawaan: alert('Hasilnya aneh. Sungguh.'); }
Sekarang keduanya 3
dan 5
menunjukkan pesan yang sama.
Kemampuan untuk “mengelompokkan” kasus adalah efek samping dari cara kerja switch/case
tanpa break
. Di sini eksekusi case 3
dimulai dari baris (*)
dan berlanjut ke case 5
, karena tidak ada break
.
Mari kita tekankan bahwa pemeriksaan kesetaraan selalu ketat. Nilainya harus bertipe sama agar cocok.
Sebagai contoh, mari kita perhatikan kodenya:
let arg = prompt("Masukkan nilai?"); beralih (arg) { kasus '0': kasus '1': alert('Satu atau nol'); merusak; kasus '2': peringatan('Dua'); merusak; kasus 3: alert('Tidak pernah dijalankan!' ); merusak; bawaan: alert('Nilai tidak diketahui'); }
Untuk 0
, 1
, alert
pertama dijalankan.
Untuk 2
alert
kedua berjalan.
Namun untuk 3
, hasil dari prompt
adalah string "3"
, yang tidak sepenuhnya sama dengan ===
dengan angka 3
. Jadi kita punya kode mati dalam case 3
! Varian default
akan dijalankan.
pentingnya: 5
Tulis kode menggunakan if..else
yang sesuai dengan switch
berikut :
beralih (peramban) { kasus 'Tepi': alert("Anda Punya Keunggulan!" ); merusak; kasus 'Krom': kasus 'Firefox': kasus 'Safari': kasus 'Opera': alert('Oke, kami juga mendukung browser ini' ); merusak; bawaan: alert('Kami harap halaman ini terlihat baik-baik saja!' ); }
Untuk mencocokkan fungsionalitas switch
dengan tepat, if
harus menggunakan perbandingan yang ketat '==='
.
Namun untuk string tertentu, '=='
sederhana juga berfungsi.
if(peramban == 'Tepi') { alert("Anda Punya Keunggulan!"); } else if (peramban == 'Chrome' || peramban == 'Firefox' || peramban == 'Safari' || peramban == 'Opera') { alert('Oke, kami juga mendukung browser ini' ); } kalau tidak { alert('Kami harap halaman ini terlihat baik-baik saja!' ); }
Harap diperhatikan: konstruksi browser == 'Chrome' || browser == 'Firefox' …
dibagi menjadi beberapa baris agar lebih mudah dibaca.
Namun konstruksi switch
masih lebih bersih dan deskriptif.
pentingnya: 4
Tulis ulang kode di bawah ini menggunakan pernyataan switch
tunggal:
misalkan a = +prompt('a?', ''); jika (a == 0) { peringatan( 0 ); } jika (a == 1) { peringatan( 1 ); } jika (a == 2 || a == 3) { peringatan('2,3'); }
Dua pemeriksaan pertama berubah menjadi dua case
. Pemeriksaan ketiga dibagi menjadi dua kasus:
misalkan a = +prompt('a?', ''); saklar (a) { kasus 0: peringatan( 0 ); merusak; kasus 1: peringatan( 1 ); merusak; kasus 2: kasus 3: peringatan('2,3'); merusak; }
Harap diperhatikan: break
di bagian bawah tidak diperlukan. Namun kami menerapkannya agar kode tersebut tahan terhadap masa depan.
Kedepannya ada kemungkinan kita ingin menambahkan satu case
lagi, misalnya case 4
. Dan jika kita lupa menambahkan break sebelumnya, di akhir case 3
akan terjadi error. Jadi itu semacam asuransi diri.