js零散知识点之与或运算

版权声明:本文为博主原创文章,转载请附上原文地址 https://blog.csdn.net/writing_happy/article/details/83339551

逻辑与和逻辑或

  逻辑运算中,0表示false,1表示true。

  逻辑与的运算规则是:

0&&0 == 0
0&&1 == 0
1&&0 == 0
1&&1 == 1

  逻辑或的运算规则是:

0||0 == 0
0||1 == 1
1||0 == 1
1||1 == 1

  在很多语言中逻辑与和短路与是有区别的,一般情况下,你写a&b得到的结果会是a与b的值,计算机会分别计算a的值和b的值然后对它们进行与运算。而当你写a&&b的时候,如果a的值为0,则计算机不会再去计算b的值,因为此时a&&b这个表达式的结果已经出来了。

  在js里,如果有这样的一段代码0&&console.log(2333),由于前面的0已经可以得到整个式子的结果,后边的console.log(2333)不会执行。这一点在多数编程语言中都是一样的。

  但是,如果你把这一句前面的0改成1,那么你的预期结果是什么?

  2333?console.log(2333)的输出结果是2333,但是返回值是undefined。

  0?这是重点。在c语言中,逻辑运算的结果为真则等于1,为假则等于0。但是在js中,不论真假,结果总逃不出运算的数据。也就是说,如果你的式子是1&&undefined,那么运算的结果要么是1要么是undefined。

  所以正确结果应该是undefined。

  我相信你们没有忘记js的几个falsy值吧?0,NaN,’’,undefined,null,false

  在js里面的逻辑与运算中,这几个falsy值相当于false,其它的都是true。但是逻辑运算的结果并不会直接返回true或者是false或者是0/1,它会直接返回参与运算的数据项。

  比如9 && NaN && 4的结果是NaN,比如9 && 5 && 7的结果是7。

按位与运算和按位或运算

  上面说过,js中&&表示短路与运算,那&呢?普通的逻辑与运算?不是的。在js中,单独的一个&符表示按位与运算,单独的一个|表示按位或运算。(我不知道其它语言是不是这样)

5&10  //5&10 === 1010 & 0101 === 0000 === 0
5|10  //5|10 === 1010 | 0101 === 1111 === 15

  所谓的按位与(按位或)运算,都是先将数据转换成二进制,然后再每一位都进行与(或)运算,最后得到的结果再转换成十进制输出。

  待更新——除了number类型之外其它的数据类型进行按位与(或)运算呢?从运算结果来看没怎么看懂。

猜你喜欢

转载自blog.csdn.net/writing_happy/article/details/83339551