Itu tidak hanya mengkonversi non-Angka ke Angka, itu mengubahnya menjadi Angka yang dapat dinyatakan sebagai ints 32-bit unsigned.
Meskipun Nomor JavaScript ini adalah double-presisi mengapung (*), operator bitwise ( <<
, >>
, &
, |
dan ~
) didefinisikan dalam hal operasi pada 32-bit bilangan bulat. Melakukan operasi bitwise mengubah angka menjadi int yang ditandatangani 32-bit, kehilangan pecahan dan bit tempat yang lebih tinggi dari 32, sebelum melakukan perhitungan dan kemudian mengonversi kembali ke Angka.
Jadi melakukan operasi bitwise tanpa efek aktual, seperti pergeseran ke kanan 0 bit >>0
, adalah cara cepat untuk membulatkan angka dan memastikannya berada dalam kisaran int 32-bit. Selain itu, >>>
operator rangkap tiga , setelah melakukan operasi yang tidak ditandatangani, mengubah hasil perhitungannya menjadi Angka sebagai bilangan bulat yang tidak ditandatangani daripada bilangan bulat yang ditandatangani yang lain, sehingga dapat digunakan untuk mengonversi negatif ke komplemen 32-bit-dua-dua-komplemen. versi sebagai Nomor besar. Menggunakan >>>0
memastikan Anda memiliki bilangan bulat antara 0 dan 0xFFFFFFFF.
Dalam hal ini ini berguna karena ECMAScript mendefinisikan indeks Array dalam hal 32 bit int unsigned. Jadi, jika Anda mencoba menerapkan array.filter
dengan cara yang persis duplikat apa yang dikatakan standar ECMAScript Fifth Edition, Anda akan memasukkan nomor ke int unsigned 32-bit seperti ini.
(Pada kenyataannya ada sedikit kebutuhan praktis untuk ini karena mudah-mudahan orang tidak akan menetapkan array.length
untuk 0.5
, -1
, 1e21
atau 'LEMONS'
. Tapi ini penulis JavaScript kita bicarakan, sehingga Anda tidak pernah tahu ...)
Ringkasan:
1>>>0 === 1
-1>>>0 === 0xFFFFFFFF -1>>0 === -1
1.7>>>0 === 1
0x100000002>>>0 === 2
1e21>>>0 === 0xDEA00000 1e21>>0 === -0x21600000
Infinity>>>0 === 0
NaN>>>0 === 0
null>>>0 === 0
'1'>>>0 === 1
'x'>>>0 === 0
Object>>>0 === 0
(*: yah, mereka didefinisikan berperilaku seperti pelampung. Tidak akan mengejutkan saya jika beberapa mesin JavaScript benar-benar menggunakan ints ketika itu bisa, karena alasan kinerja. Tapi itu akan menjadi detail implementasi yang tidak akan Anda ambil keuntungan dari.)