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.