javascript - react - programacion funcional vs orientada a objetos
¿Qué hace el "|"(single pipe) en JavaScript? (4)
console.log(0.5 | 0); // 0
console.log(-1 | 0); // -1
console.log(1 | 0); // 1
¿Por qué 0.5 | 0
0.5 | 0
devuelve cero, pero cualquier entero (incluido negativo) devuelve el entero de entrada? ¿Qué hace el tubo único ("|")?
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);
Esto es un bitwise o .
Como las operaciones a nivel de bit solo tienen sentido en enteros, 0.5
se trunca.
0 | x
0 | x
es x
, para cualquier x
.
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)
Las operaciones de bit a bit 6 y 10 le darán 14:
alert(6 | 10); // should show 14
Terriblemente confuso!
Un solo tubo es un poco sabio O
Realiza la operación OR en cada par de bits. a O b produce 1 si a o b es 1.
JavaScript trunca cualquier número no entero en operaciones bit a bit, por lo que se calcula como 0|0
, que es 0.