Saya melihat sintaks ini di pos StackOverflow lain dan ingin tahu apa fungsinya:
var len = this.length >>> 0;
Apa artinya >>>
?
javascript
Jey Balachandran
sumber
sumber
parseInt
?>>>
selalu menyetel bit tanda ke nol, bahkan jika Anda menggeser bit nol.>>>
operator: stackoverflow.com/questions/3081987/…var length = list.length >>> 0;
(kasus penggunaan yang sama seperti Anda)Jawaban:
Itu adalah operator shift kanan tanpa tanda tangan . Menariknya, ini adalah satu-satunya operator bitwise yang tidak ditandatangani di JavaScript.
sumber
Mengabaikan makna yang dimaksudkan, kemungkinan besar di sinilah Anda akan melihatnya digunakan:
>>> 0
unik karena merupakan satu-satunya operator yang akan mengonversi jenis apa pun menjadi bilangan bulat positif:"string" >>> 0 == 0 (function() { }) >>> 0 == 0 [1, 2, 3] >>> 0 == 0 Math.PI >>> 0 == 3
Dalam contoh Anda
var len = this.length >>> 0
, ini adalah cara untuk mendapatkan panjang bilangan bulat yang akan digunakan untuk mengulangthis
, apa pun jenisnyathis.length
.Demikian pula,
~~x
dapat digunakan untuk mengubah variabel apa pun menjadi bilangan bulat bertanda.sumber
>>>
?Operator itu adalah shift kanan logis. Di sini jumlahnya digeser 0 bit. Pergeseran bit nol secara matematis seharusnya tidak berpengaruh.
Tapi di sini digunakan untuk mengubah nilai menjadi integer 32 bit unsigned.
sumber
>>>
adalah operator yang sedikit bijak, shift kanan tanpa isi .Saya pikir satu-satunya efek
>>> 0
pada bilangan positif adalah membulatkan ke bawah ke bilangan bulat terdekat, sama sepertiMath.floor()
. Saya tidak melihat mengapa ini perlu dalam contoh Anda, karena umumnya.length
properti (misalnya dari anArray
) sudah menjadi bilangan bulat.Saya juga melihat sedikit lebih pendek yang
~~
digunakan dengan cara yang sama:~~9.5 == 9; // true
.sumber
Math.abs()
saat digunakan untuk bilangan negatif.>>> 0
pada bilangan negatif, ia mengubahnya menjadi pujian 2, kemudian lakukan pergeseran ke kanan. Karena itu-14 >>> 0 == 1073741820
. ( msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx )