什么是“|” (单管)用JavaScript做什么?

时间:2011-06-01 00:14:27

标签: javascript

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

为什么0.5 | 0返回零,但是任何整数(包括负数)都返回输入整数?单管(“|”)做什么?

5 个答案:

答案 0 :(得分:141)

位比较如此简单,几乎是不可理解的;)看看这个“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

非常混乱!

答案 1 :(得分:139)

这是bitwise or 由于按位运算仅对整数有意义,因此0.5被截断。

对于任何0 | x

xx

答案 2 :(得分:20)

单个管道是bit-wise OR

  

对每对执行OR运算   比特。如果a,则a或b产生1   或b是1.

JavaScript在按位运算中截断任何非整数,因此它的计算结果为0|0,即0。

答案 3 :(得分:7)

此示例将对您有所帮助。

 
    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);

答案 4 :(得分:0)

这是一个 Bitwsie OR (|)

操作数被转换为 32 位整数并由一系列位(零和一)表示。超过 32 位的数字将丢弃其最高有效位。

因此,在我们的例子中,十进制数被转换为整数 0.5 到 0。

= 0.5 | 0
= 0   | 0
= 0