2012-02-20 17 views
5

Bunun Nedir:Bu çizgi ne yapıyor? arr.length >>> 0

arr.length >>> 0 

Ve neden bunu kullanmak istesin?

+0

Ayrıca, bu operatörün adını eklemek için etiketler konusunda yardıma ihtiyacım var, çünkü adını bilmiyorum – mithril333221

+0

Bağlam king ... bize biraz ver. – jondavidjohn

+3

Normalde kodları sorularda düzenlemek istemiyorum, ama * ben * uzunluğundan emin oldum, uzunluğunu değil. –

cevap

8

Bu imzasız doğru vites operatörüdür. Bu durumda (0 ile kullanıldığında), arr.length'un bir tam sayı olmasını ya da arr.length'un kesin imzalanmamış 32 bit tam sayı değeri olarak değerlendirmesini sağlar. (Bu asla NaN, asla negatif bir demek ve ondalık kısmı vardır asla.)

Örnekler:

'1'  >>> 0: 1 
1   >>> 0: 1 
''  >>> 0: 0 
undefined >>> 0: 0 
null  >>> 0: 0 
1.0∙∙∙01 >>> 0: 1 

karşılaştır: sağlamak için

Number('1')  : 1 
Number(1)  : 1 
Number('')  : 0 
Number(undefined): NaN 
Number(null)  : 0 
Number(1.0∙∙∙01) : 1.0∙∙∙01 

Sadece orada olması doğru uzunluk kullanılıyor.

5

.length'un 32 bitlik bir tam sayı olduğunu garanti eder.

en uygulamalarda, Dizi indeksleri (en azından Array.prototype yöntemler ve .length sihirli davranışları ile çalışan) 32 bitlik bir dizi sınırlıdır.

+2

Özledin mi?… Neden onu kullanmak istiyorum? Göz önünde bulundurulması gereken tek durum, * uzunluk * tam sayı olmayan bir değere ayarlanabiliyor olmasıdır. Ancak bu, ECMA-262'ye uygun bir uygulamada [olamaz] (http://es5.github.com/#x15.4.5.1). Uzunluk ** her zaman ** negatif olmayan bir tamsayıdır. Yani cevap: ** asla **. – RobG

+0

"Asla" demem. Standart yöntemler bir * 'ToUint32 (lenVal)' * dönüşümü yaptığından, ECMA-262 uyumlu (veya mümkün olduğunca yakın) bir standart Array.prototype yöntemi için bir şim yazıyorsanız kullanılır. Ayrıca, spec, "dizi benzeri" nesnelere uygulanacak "Array.prototype" yöntemlerine izin verir. Bu, uygun bir ".length" değerini uygulamak için bir shim için motivasyon sağlayacaktır. –

+0

Eğer durum buysa, o zaman -ve değerlerin ilk olarak ele alınması gerekir, çünkü >>> 'nin bunlara bazı önemli etkileri vardır. Ve uzunluk *, yerleşik * array.length * için mevcut olandan biraz daha azını sınırlar, bu yüzden değeri negatif olmayan bir tam sayıya dönüştürmek veya dönüştürmek için zayıf bir yöntemdir. – RobG

İlgili konular