console.log(0.5 | 0); // 0
console.log(-1 | 0); // -1
console.log(1 | 0); // 1
Pourquoi 0.5 | 0renvoie zéro, mais tout entier (y compris négatif) renvoie l'entier d'entrée? Que fait le tube unique ("|")?
console.log(0.5 | 0); // 0
console.log(-1 | 0); // -1
console.log(1 | 0); // 1
Pourquoi 0.5 | 0renvoie zéro, mais tout entier (y compris négatif) renvoie l'entier d'entrée? Que fait le tube unique ("|")?
Réponses:
C'est un peu ou .
Étant donné que les opérations au niveau du bit n'ont de sens que sur les entiers, 0.5est tronquée.
0 | xest x, pour tout x.
parseInt()
La comparaison de bits est si simple qu'elle est presque incompréhensible;) Découvrez ce "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)
Bitwise ORing 6 et 10 vous donnera 14:
alert(6 | 10); // should show 14
Terriblement déroutant!
alert(true | false) //yields 1; alert(true | true) //yields 1; alert(false | true) //yields 1; alert(false | false) //yields 0
Un seul tube est un OU bitumineux .
Effectue l'opération OR sur chaque paire de bits. a OR b donne 1 si a ou b vaut 1.
JavaScript tronque tous les nombres non entiers dans les opérations au niveau du bit, donc il est calculé comme 0|0, qui est 0.
Cet exemple vous aidera.
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);