Para qué es esto:¿Qué está haciendo esta línea? arr.Length >>> 0
arr.length >>> 0
Y por qué debería querer usarlo?
Para qué es esto:¿Qué está haciendo esta línea? arr.Length >>> 0
arr.length >>> 0
Y por qué debería querer usarlo?
Es el operador de desplazamiento a la derecha sin signo. En este caso (cuando se usa con 0
) garantiza que arr.length
es un número entero, o más bien, se evalúa como arr.length
como valor entero estricto sin signo de 32 bits. (Esto significa que nunca es NaN
, no negativo, y nunca tiene una parte decimal.)
Ejemplos:
'1' >>> 0: 1
1 >>> 0: 1
'' >>> 0: 0
undefined >>> 0: 0
null >>> 0: 0
1.0∙∙∙01 >>> 0: 1
Comparar con:
Number('1') : 1
Number(1) : 1
Number('') : 0
Number(undefined): NaN
Number(null) : 0
Number(1.0∙∙∙01) : 1.0∙∙∙01
Es sólo existe para asegurar que la longitud correcta esta siendo usado.
Asegura que .length
es un entero de 32 bits.
En la mayoría de las implementaciones, los índices de matriz está limitado a un rango de 32 bits (al menos cuando se trabaja con Array.prototype
métodos, y los comportamientos mágicos de .length
).
Te perdiste '... ¿por qué debería querer usarlo?'. El único caso en el que podría considerarse es si * length * podría establecerse en un valor no entero. Pero eso [no puede ocurrir] (http://es5.github.com/#x15.4.5.1) en una implementación conforme a ECMA-262. La longitud es ** siempre ** un entero no negativo. Entonces la respuesta es: ** nunca **. – RobG
No diría "nunca". Se usa si está escribiendo un shim para un método estándar 'Array.prototype' que intenta ser compatible con ECMA-262 (o lo más cerca posible), ya que los métodos estándar hacen una conversión' 'ToUint32 (lenVal)' *. Además, la especificación permite que los métodos 'Array.prototype' se apliquen a los objetos de tipo" tipo array ". Esto proporcionaría la motivación para un shim para imponer el valor apropiado de '.length'. –
Si ese fuera el caso, entonces los valores -ve deben tratarse primero ya que '>>>' tiene algunos efectos drásticos sobre ellos. Y limita el tamaño de la longitud a un poco menos que el disponible para * array.length * incorporado, por lo que es un método deficiente para garantizar o convertir el valor en un entero no negativo. – RobG
también necesito ayuda en las etiquetas para agregar el nombre de ese operador, ya que no sé su nombre – mithril333221
El contexto es el rey ... danos un poco. – jondavidjohn
Normalmente no me gusta editar el código en las preguntas, pero estoy * bastante * seguro de que quería decir 'longitud', no' longitud'. –