JavaScript üç katı büyüktür


89

Bu sözdizimini başka bir StackOverflow gönderisinde gördüm ve ne işe yaradığını merak ettim:

var len = this.length >>> 0;

Ne anlama >>>geliyor?


1
Bu bir doğru kaydırma operatörü, ama neden sıfıra doğru kayasınız? Bu bir tür ucuz yol parseIntmu?
Rocket Hazmat

5
>>>sıfır bit kaydırsanız bile işaret bitini her zaman sıfıra ayarlar.
John Flatness

4
Neden bu durumda >>>operatörü kullandıklarına dair bu yanıtı kontrol edin : stackoverflow.com/questions/3081987/…
Christian C. Salvadó

1
JavaScript üçlü açılı ayraç
wprl

Bu sözdizimini developer.mozilla.org/en/docs/Web/JavaScript/Reference/… var length = list.length >>> 0;
Mars Robertson

Yanıtlar:



107

Amaçlanan anlamı göz ardı edildiğinde, büyük olasılıkla burada kullanıldığını göreceksiniz:


>>> 0 herhangi bir türü pozitif tam sayıya dönüştürecek tek operatör olması bakımından benzersizdir:

"string"         >>> 0 == 0
(function() { }) >>> 0 == 0
[1, 2, 3]        >>> 0 == 0
Math.PI          >>> 0 == 3

Örneğinizde var len = this.length >>> 0, bu, thistürü ne olursa olsun yinelemek için kullanılacak bir tam sayı uzunluğu elde etmenin bir yoludur this.length.


Benzer şekilde, ~~xherhangi bir değişkeni işaretli bir tam sayıya dönüştürmek için kullanılabilir.


kullanarak nasıl yineleyeceğinizi açıklayabilir misiniz >>>?

1
K48 Ne demek sanmıyorum @ iterate , onun bu kuvvetler uzunluğu bir sayı olmak demek istedi sanırım. (Aksi takdirde, aynı derecede kafam karıştı.) Ama işte daha fazlasını aydınlatan harika bir cevap: stackoverflow.com/questions/1822350/…
Mike Williamson

9

Bu operatör mantıksal bir sağa kaymadır. Burada sayı 0 bit kaydırılır. Matematiksel olarak sıfır bitlik bir kaymanın hiçbir etkisi olmamalıdır.

Ancak burada değeri işaretsiz 32 bitlik bir tam sayıya dönüştürmek için kullanılır.


3

>>>bit tabanlı bir operatör, sıfır dolgulu sağa kaydırmadır .

>>> 0Pozitif sayı üzerindeki tek etkisinin , aynı şekilde en yakın tam sayıya yuvarlanması olduğunu düşünüyorum Math.floor(). Genel olarak bir .lengthözellik (örneğin bir Array) zaten bir tamsayı olacağından , örneğinizde bunun neden gerekli olduğunu anlamıyorum .

Ben de biraz daha kısa gördüğüm ~~aynı şekilde kullanılır: ~~9.5 == 9; // true.


Math.abs()Negatif sayılar için kullanıldığında aynı olduğundan şüpheliyim .
Al Kepp

6
>>> 0Negatif bir sayı yaparsanız , onu 2'nin iltifatına dönüştürür, sonra sağa kayar. Bu nedenle -14 >>> 0 == 1073741820. ( msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx )
Rocket Hazmat, 10'11

@AlKepp - evet, hatayı gördüm ve düzelttim - önce test etmeliydim, ama bu kesinlikle hızlı bir soruydu :).
nrabinowitz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.