2012-04-10 42 views
8

Duplicar posible:
What is the “double tilde” (~~) operator in JavaScript?¿Qué hace ~~ en JavaScript/node.js?

me encontré con este recorte de código en la fuente de una biblioteca Node.js. ¿Qué efecto tiene ~~ en la variable input?

inArray[3] = ~~input; 

También se utiliza en otras maneras:

return ~~ ((a - b)/864e5/7 + 1.5); 
+9

Hace que el código sea confuso para leer -_-. Odio cómo la gente hace esto recientemente; me enoja mucho – Domenic

+1

Heh, esto es aún más molesto que el doble '!!' .. –

+0

@jasonbar no puede buscar ~~, pero sí miré :(¡Por alguna razón nunca se me ocurrió una "doble tilde" :) – Kato

Respuesta

13

El operador ~ voltea los bits de su operando. Utilizándolo dos veces voltea los bits, luego los voltea de nuevo, devolviendo un valor Javascript estándar equivalente al operando, pero en forma de entero. Es abreviatura de parseInt(myInt).

+0

¡Gracias! Pensé que sería algo así. Por alguna razón, no pude encontrar la manera de Google; debe necesitar más té :) – Kato

+0

No hay problema, consulte mi comentario sobre su pregunta sobre cómo hacer para los operadores de Google. : p –

+0

@Kato Busque en google "tilde JavaScript" y presione I Feel lucky: http://dreaminginjavascript.wordpress.com/2008/07/04/28/ – andlrc

1

Se convierte el valor a un número entero.

9

Es una forma difícil de truncar un valor, un poco como lo hace Math.floor, excepto que esto se comporta de manera diferente para los números negativos. Por ejemplo, truncar -15.9 (~~-15.9) da -15, pero el piso siempre se redondeará hacia el número más bajo, por lo que Math.floor(-15.9) dará 16.

Otra forma de hacerlo es is to OR with zero.

var a = 15.9 | 0; //a = 15 
+0

re: De manera diferente para valores negativos, ¿cómo es eso? – Kato

+0

@Kato agregó una explicación para publicar. –

+0

Parece que ~~ es bastante más rápido que Math.floor; no es suficiente en la mayoría de los casos. – Kato