Masukkan nilai Anda ke dalam array, dan periksa apakah item Anda ada di dalam array:
if ([1, 2, 3, 4].includes(test.type)) {
// Do something
}
Jika browser yang Anda dukung tidak memiliki Array#includes
metode, Anda dapat menggunakan polyfill ini .
Penjelasan singkat tentang ~
pintasan tilde:
Pembaruan: Karena kita sekarang memiliki includes
metode, tidak ada gunanya menggunakan ~
peretasan lagi. Hanya menyimpannya di sini untuk orang-orang yang tertarik mengetahui cara kerjanya dan / atau menjumpainya dalam kode orang lain.
Alih-alih memeriksa jika hasilnya dari indexOf
adalah >= 0
, ada jalan pintas kecil yang menyenangkan:
if ( ~[1, 2, 3, 4].indexOf(test.type) ) {
// Do something
}
Ini biola: http://jsfiddle.net/HYJvK/
Bagaimana cara kerjanya? Jika item ditemukan dalam array, indexOf
kembalikan indeksnya. Jika item itu tidak ditemukan, itu akan kembali -1
. Tanpa terlalu banyak detail, ~
ini adalah operator BUKAN bitwise , yang 0
hanya akan kembali untuk -1
.
Saya suka menggunakan jalan ~
pintas, karena lebih ringkas daripada melakukan perbandingan pada nilai kembali. Saya berharap JavaScript akan memiliki in_array
fungsi yang mengembalikan Boolean secara langsung (mirip dengan PHP), tapi itu hanya angan-angan ( Pembaruan: sekarang. Ini disebut includes
. Lihat di atas). Perhatikan bahwa jQuery's inArray
, saat membagikan tanda tangan metode PHP, sebenarnya meniru indexOf
fungsionalitas asli (yang berguna dalam kasus yang berbeda, jika indeksnya benar-benar setelah Anda).
Catatan penting: Menggunakan pintasan tilde tampaknya dibalut kontroversi, karena beberapa orang sangat percaya bahwa kode tidak cukup jelas dan harus dihindari dengan cara apa pun (lihat komentar pada jawaban ini). Jika Anda berbagi sentimen mereka, Anda harus tetap berpegang pada .indexOf(...) >= 0
solusinya.
Penjelasan lebih lama:
Integer dalam JavaScript ditandatangani, yang berarti bahwa bit paling kiri dicadangkan sebagai bit tanda; sebuah bendera untuk menunjukkan apakah angka itu positif atau negatif, dengan 1
yang negatif.
Berikut adalah beberapa contoh angka positif dalam format biner 32-bit:
1 : 00000000000000000000000000000001
2 : 00000000000000000000000000000010
3 : 00000000000000000000000000000011
15: 00000000000000000000000000001111
Sekarang ini adalah angka-angka yang sama, tetapi negatif:
-1 : 11111111111111111111111111111111
-2 : 11111111111111111111111111111110
-3 : 11111111111111111111111111111101
-15: 11111111111111111111111111110001
Mengapa kombinasi aneh seperti itu untuk angka negatif? Sederhana. Angka negatif hanyalah kebalikan dari angka positif +1; menambahkan angka negatif ke angka positif harus selalu menghasilkan 0
.
Untuk memahami ini, mari kita lakukan aritmatika biner sederhana.
Berikut adalah bagaimana kita akan menambahkan -1
ke +1
:
00000000000000000000000000000001 +1
+ 11111111111111111111111111111111 -1
-------------------------------------------
= 00000000000000000000000000000000 0
Dan di sini adalah bagaimana kita akan menambahkan -15
ke +15
:
00000000000000000000000000001111 +15
+ 11111111111111111111111111110001 -15
--------------------------------------------
= 00000000000000000000000000000000 0
Bagaimana kita mendapatkan hasil itu? Dengan melakukan penambahan reguler, cara kami diajarkan di sekolah: Anda mulai di kolom paling kanan, dan Anda menambahkan semua baris. Jika jumlahnya lebih besar dari angka satu digit terbesar (yang dalam desimal 9
, tetapi dalam biner 1
), kami membawa sisanya ke kolom berikutnya.
Sekarang, seperti yang akan Anda perhatikan, ketika menambahkan angka negatif ke angka positifnya, kolom paling kanan yang tidak semua 0
s akan selalu memiliki dua 1
s, yang bila ditambahkan bersama akan menghasilkan 2
. Representasi biner dari dua wujud 10
, kita bawa 1
ke kolom berikutnya, dan beri 0
hasil pada kolom pertama. Semua kolom lain di sebelah kiri hanya memiliki satu baris dengan 1
, sehingga yang 1
terbawa dari kolom sebelumnya akan bertambah lagi 2
, yang kemudian akan terbawa ... Proses ini berulang sampai kita sampai ke kolom paling kiri, di mana yang 1
akan dibawa ke mana-mana, sehingga meluap dan hilang, dan kami pergi dengan 0
s di seluruh.
Sistem ini disebut 2's Complement . Anda dapat membaca lebih lanjut tentang ini di sini:
Representasi Pelengkap 2 untuk Integer yang Ditandatangani .
Sekarang kursus kilat di komplemen 2 sudah berakhir, Anda akan melihat bahwa -1
hanya nomor yang representasi binernya ada 1
di seluruh.
Menggunakan ~
operator bitwise NOT, semua bit dalam jumlah yang diberikan dibalik. Satu - satunya cara untuk 0
kembali dari membalikkan semua bit adalah jika kita mulai dengan 1
semua.
Jadi, semua ini adalah cara yang panjang lebar untuk mengatakan bahwa ~n
hanya akan kembali 0
jika n
ada -1
.
in
?