Что означает "|" (один канал) в JavaScript?

console.log(0.5 | 0); // 0
console.log(-1 | 0);  // -1
console.log(1 | 0);   // 1

Почему 0.5 | 0 возвращает ноль, но любое целое число (включая отрицательное) возвращает целое число ввода? Что делает единственный канал ( "|" )?

Ответ 1

Это побитовое или.
Поскольку побитовые операции имеют смысл только для целых чисел, 0.5 усекается.

0 | x x, для любого x.

Ответ 2

Сравнение бит настолько просто, что это почти непонятно;) Проверьте этот "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)

Побитие ORing 6 и 10 даст вам 14:

   alert(6 | 10); // should show 14

Ужасно смущает!

Ответ 3

Один канал представляет собой bit-wise ИЛИ.

Выполняет операцию ИЛИ для каждой пары бит. a OR b дает 1, если либо или b равно 1.

JavaScript усекает любые нецелые числа в побитовых операциях, поэтому он вычисляется как 0|0, который равен 0.