¿Qué significa "|" (tubo único) ¿hacer en JavaScript?
console.log(0.5 | 0); // 0
console.log(-1 | 0); // -1
console.log(1 | 0); // 1
¿Por qué 0.5 | 0
devuelve cero, pero cualquier número entero (incluido el negativo) devuelve el número entero de entrada? ¿Qué hace la tubería única ("|")?
Aceptado
Esto es bit a bit o .
Dado que las operaciones bit a bit sólo tienen sentido en números enteros, 0.5
se trunca.
x | 0
es x
, si x
es un número entero.
La comparación de bits es tan simple que es casi incomprensible ;) Mira este "nybble"
8 4 2 1
-------
0 1 1 0 = 6 (4 + 2)
1 0 1 0 = 10 (8 + 2)
=======
1 1 1 0 = 14 (8 + 4 + 2)
Bit a bit ORing 6 y 10 le dará 14:
alert(6 | 10); // should show 14
¡Terriblemente confuso!
Una sola tubería es un OR bit a bit .
Realiza la operación OR en cada par de bits. a O b produce 1 si a o b son 1.
JavaScript trunca cualquier número que no sea entero en operaciones bit a bit, por lo que se calcula como 0|0
, que es 0.
Este ejemplo te ayudará.
var testPipe = function(input) {
console.log('input => ' + input);
console.log('single pipe | => ' + (input | 'fallback'));
console.log('double pipe || => ' + (input || 'fallback'));
console.log('-------------------------');
};
testPipe();
testPipe('something');
testPipe(50);
testPipe(0);
testPipe(-1);
testPipe(true);
testPipe(false);
Expandir fragmento