Eu vi essa sintaxe em outra postagem do StackOverflow e estava curioso para saber o que ela faz:
var len = this.length >>> 0;
O que isso >>>implica?
Eu vi essa sintaxe em outra postagem do StackOverflow e estava curioso para saber o que ela faz:
var len = this.length >>> 0;
O que isso >>>implica?
>>>sempre define o bit de sinal para zero, mesmo se você mudar para zero bits.
>>>operador: stackoverflow.com/questions/3081987/…
var length = list.length >>> 0; (mesmo caso de uso que o seu)
Respostas:
Esse é um operador de mudança à direita sem sinal . Curiosamente, é o único operador bit a bit que é unsigned em JavaScript.
O operador >>> desloca os bits da expressão1 exatamente pelo número de bits especificado na expressão2. Zeros são preenchidos da esquerda. Os dígitos deslocados para a direita são descartados.
Ignorando seu significado pretendido, é mais provável que você o veja usado:
>>> 0 é único por ser o único operador que converterá qualquer tipo em um número inteiro positivo:
"string" >>> 0 == 0
(function() { }) >>> 0 == 0
[1, 2, 3] >>> 0 == 0
Math.PI >>> 0 == 3
Em seu exemplo, var len = this.length >>> 0esta é uma maneira de obter um comprimento inteiro para usar para iterar this, seja qual for o tipo this.length.
Da mesma forma, ~~xpode ser usado para converter qualquer variável em um inteiro com sinal.
Esse operador é um deslocamento lógico para a direita. Aqui, o número é deslocado 0 bits. Um deslocamento de zero bits matemeticamente não deve ter efeito.
Mas aqui ele é usado para converter o valor em um inteiro de 32 bits sem sinal.
>>>é um operador bit a bit, deslocamento para a direita com preenchimento zero .
Acho que o único efeito de >>> 0em um número positivo é arredondar para baixo para o inteiro mais próximo, o mesmo que Math.floor(). Não vejo por que isso seria necessário em seu exemplo, já que geralmente uma .lengthpropriedade (por exemplo, de an Array) já seria um número inteiro.
Eu também vi o ligeiramente mais curto ~~usado da mesma forma: ~~9.5 == 9; // true.
Math.abs()quando usado para números negativos.
>>> 0em um número negativo, ele o converterá no elogio de 2 e, em seguida, fará o deslocamento certo. Portanto -14 >>> 0 == 1073741820. ( msdn.microsoft.com/en-us/library/342xfs5s%28v=vs.94%29.aspx )
parseInt?