console.log(0.5 | 0); // 0
console.log(-1 | 0); // -1
console.log(1 | 0); // 1
Perché 0.5 | 0restituisce zero, ma qualsiasi numero intero (incluso negativo) restituisce il numero intero di input? Cosa fa la singola pipe ("|")?
console.log(0.5 | 0); // 0
console.log(-1 | 0); // -1
console.log(1 | 0); // 1
Perché 0.5 | 0restituisce zero, ma qualsiasi numero intero (incluso negativo) restituisce il numero intero di input? Cosa fa la singola pipe ("|")?
Risposte:
Questo è un bit per bit o .
Poiché le operazioni bit a bit hanno senso solo sugli interi, 0.5viene troncata.
0 | xè x, per nessuno x.
parseInt()
Il confronto dei bit è così semplice che è quasi incomprensibile;) Dai un'occhiata a questo "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)
OR bit bit 6 e 10 ti darà 14:
alert(6 | 10); // should show 14
Terribilmente confuso!
alert(true | false) //yields 1; alert(true | true) //yields 1; alert(false | true) //yields 1; alert(false | false) //yields 0
Una singola pipe è un OR bit-saggio .
Esegue l'operazione OR su ciascuna coppia di bit. a OR b produce 1 se aob è 1.
JavaScript tronca qualsiasi numero non intero in operazioni bit a bit, quindi viene calcolato come 0|0, che è 0.
Questo esempio ti aiuterà.
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);