Что означает "|" (одну трубу) делать в JavaScript?
console.log(0.5 | 0); // 0
console.log(-1 | 0); // -1
console.log(1 | 0); // 1
Почему 0.5 | 0
вернуть ноль, но любое целое число (включая отрицательное) возвращает входное целое число? Что делает одна труба ("|")?
5 ответов
Это побитовое или.
Поскольку побитовые операции имеют смысл только для целых чисел, 0.5
усечено.
0 | x
является x
, для любого x
,
Сравнение битов настолько просто, что почти непостижимо;) Посмотри на этот "клочок"
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)
Побитовое ORing 6 и 10 даст вам 14:
alert(6 | 10); // should show 14
Страшно запутанно!
Одиночная труба - это немного ИЛИ.
Выполняет операцию ИЛИ на каждой паре битов. ИЛИ b выдает 1, если либо a, либо b равно 1.
JavaScript обрезает любые нецелые числа в побитовых операциях, поэтому вычисляется как 0|0
, который равен 0.
Этот пример поможет вам.
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);
Это Bitwsie OR (|).
Операнды преобразуются в 32-битные целые числа и выражаются серией битов (нулей и единиц). Числа с более чем 32 битами отбрасывают старшие разряды.
Итак, в нашем случае десятичное число преобразуется в целое число от 0,5 до 0.
= 0.5 | 0
= 0 | 0
= 0