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

Mat*_*rym 138 javascript

console.log(0.5 | 0); // 0
console.log(-1 | 0);  // -1
console.log(1 | 0);   // 1
Run Code Online (Sandbox Code Playgroud)

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

Tre*_*rey 146

位比较如此简单,几乎是不可理解的;)看看这个"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)
Run Code Online (Sandbox Code Playgroud)

按位ORing 6和10将给你14:

   alert(6 | 10); // should show 14
Run Code Online (Sandbox Code Playgroud)

非常混乱!

  • 也适用于布尔值.JS将true解释为1,将false解释为0; 所以`alert(true | false)//得1; alert(true | true)//产生1; alert(false | true)//产生1; alert(false | false)//产生0` (16认同)

SLa*_*aks 144

这是一个按位或.
由于按位运算仅对整数有意义,因此会0.5被截断.

0 | x是的x,对任何人来说x.

  • 0 | x是x,对于任何x:不正确.0 | 0.5 = 0 (10认同)
  • 这是将浮点数转换为int的好方法,或者使用`parseInt()` (5认同)
  • @MaBi:您应该知道该值被转换为32位整数,因此对于较大的数字它将无法正常工作. (4认同)
  • 仅用于按位或.正如@Guffa所说,大数字不会像预期的那样表现.例如:248004937500 | 0 = -1103165668 (2认同)

Yah*_*hel 20

单个管道是按位OR.

对每对位执行OR运算.如果a或b为1,则OR b产生1.

JavaScript在按位运算中截断任何非整数,因此其计算为0|00,即0.

  • 这不回答这个问题.("为什么这会返回0") (5认同)

Nik*_*rao 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);
Run Code Online (Sandbox Code Playgroud)