2012-02-20 15 views
5

Co to jest za:Co robi ta linia? arr.Length >>> 0

arr.length >>> 0 

i dlaczego miałbym go używać?

+0

Potrzebuję też pomocy na tagach, aby dodać nazwę tego operatora, ponieważ nie znam jego nazwy. – mithril333221

+0

Kontekst to król ... daj nam trochę. – jondavidjohn

+3

Zwykle nie lubię edytować kodu w pytaniach, ale jestem * dość * pewny, że chodziło o "długość", a nie "długość". –

Odpowiedz

8

To niepodpisany operator prawej zmiany. W tym przypadku (w przypadku użycia z 0) zapewnia on, że arr.length jest liczbą całkowitą lub raczej jest wartością arr.length jako bezwzględną 32-bitową liczbą całkowitą niepodpisaną. (To znaczy, że nigdy nie NaN, nigdy negatywne, i nigdy nie ma część dziesiętną.)

Przykłady:

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

Porównaj z:

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

to po prostu tam, aby zapewnić odpowiednią długość jest używany.

5

Zapewnia, że ​​.length jest 32-bitową liczbą całkowitą.

W większości implementacji indeksu tablicy są ograniczone do zakresu 32-bitowym (przynajmniej podczas pracy z Array.prototype metod i magicznych zachowań .length).

+2

Tęskniłeś za "... dlaczego miałbym chcieć go użyć?". Jedyny przypadek, w którym można rozważyć, to: * długość * może być ustawiona na wartość niecałkowitą. Ale to [nie może wystąpić] (http://es5.github.com/#x15.4.5.1) w implementacji zgodnej z ECMA-262. Długość ** zawsze ** jest nieujemną liczbą całkowitą. Tak więc odpowiedź brzmi: ** nigdy **. – RobG

+0

Nie powiedziałbym "nigdy". Jest używany, jeśli piszesz shim dla standardowej metody 'Array.prototype', która stara się być zgodna z ECMA-262 (lub tak bliska jak to tylko możliwe), ponieważ standardowe metody dokonują konwersji * To Tointint (lenVal) *. Specyfikacja pozwala również na zastosowanie metod 'Array.prototype' do obiektów" podobnych do tablicowych ". Zapewniłoby to motywację do podkładki do wymuszania właściwej wartości '.length'. –

+0

Jeśli tak było, to wartości -ve muszą być traktowane jako pierwsze, ponieważ ">>>" ma na nie drastyczny wpływ. Ogranicza on również długość długości do nieco mniejszej niż dostępna dla wbudowanej * array.length *, więc jest to zła metoda zapewnienia lub konwersji wartości do nieujemnej liczby całkowitej. – RobG