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#includesmetode, Anda dapat menggunakan polyfill ini .
Penjelasan singkat tentang ~pintasan tilde:
Pembaruan: Karena kita sekarang memiliki includesmetode, 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 indexOfadalah >= 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, indexOfkembalikan indeksnya. Jika item itu tidak ditemukan, itu akan kembali -1. Tanpa terlalu banyak detail, ~ini adalah operator BUKAN bitwise , yang 0hanya akan kembali untuk -1.
Saya suka menggunakan jalan ~pintas, karena lebih ringkas daripada melakukan perbandingan pada nilai kembali. Saya berharap JavaScript akan memiliki in_arrayfungsi 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 indexOffungsionalitas 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(...) >= 0solusinya.
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 1yang 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 -1ke +1:
00000000000000000000000000000001 +1
+ 11111111111111111111111111111111 -1
-------------------------------------------
= 00000000000000000000000000000000 0
Dan di sini adalah bagaimana kita akan menambahkan -15ke +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 0s akan selalu memiliki dua 1s, yang bila ditambahkan bersama akan menghasilkan 2. Representasi biner dari dua wujud 10, kita bawa 1ke kolom berikutnya, dan beri 0hasil pada kolom pertama. Semua kolom lain di sebelah kiri hanya memiliki satu baris dengan 1, sehingga yang 1terbawa dari kolom sebelumnya akan bertambah lagi 2, yang kemudian akan terbawa ... Proses ini berulang sampai kita sampai ke kolom paling kiri, di mana yang 1akan dibawa ke mana-mana, sehingga meluap dan hilang, dan kami pergi dengan 0s 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 -1hanya nomor yang representasi binernya ada 1di seluruh.
Menggunakan ~operator bitwise NOT, semua bit dalam jumlah yang diberikan dibalik. Satu - satunya cara untuk 0kembali dari membalikkan semua bit adalah jika kita mulai dengan 1semua.
Jadi, semua ini adalah cara yang panjang lebar untuk mengatakan bahwa ~nhanya akan kembali 0jika nada -1.
in?