运算符的冷知识

398 阅读3分钟
  • && 与运算符

    使用&&将返回第一个条件为假的值。
    如果每个操作数的计算值都为true,则返回最后一个计算过的表达式。
    
  • || 或运算符

    使用||将返回第一个条件为真的值。
    如果每个操作数的计算结果都为false,则返回最后一个计算过的表达式。
    
  • & 按位与

    运算规则:两个数都转为二进制,然后从高位开始比较,如果两个数都为1则为1,否则为0。
    比如:129&128.129转换成二进制就是10000001,
    128转换成二进制就是10000000。
    从高位开始比较,得到10000000,即128.
    
    判断奇数、偶数
    偶数 & 1 = 0 
    奇数 & 1 = 1
    5&1  //1
    4&1  //0
    
  • | 按位或

    运算规则:两个数都转为二进制,然后从高位开始比较,两个数只要有一个为1则为1,否则就为0。
    比如:129|128.129转换成二进制就是10000001128转换成二进制就是10000000。
    从高位开始比较,得到10000001,即129.
    
    |的行为取决于处理的是正数还是负数,所以最好只在确定的情况下使用这个快捷方式。
     如果n为正,则n | 0有效地向下舍入。
     如果n为负数,则有效地向上舍入。
    更准确地说,此操作将删除小数点后面的任何内容,将浮点数截断为整数。
    
    console.log(23.9 | 0); // Result: 23
    console.log(-23.9 | 0); // Result: -23
    console.log((1553 / 10) | 0); // Result: 155
    console.log((1553 / 100) | 0); // Result: 15
    console.log((1553 / 1000) | 0); // Result: 1
    
  • ~ 按位非

    运算规则:一般作用与一个整形参数前,他将运算数的所有位取反。
    如果位为0,结果是1,如果位为1,结果是0\. 比如:~37
    
    在js中,对于一个整数使用~运算符,相当于改变他的符号并且减一(小数部分会被舍掉)
    ~10   //-11
    ~-10  //9
    ~3.14 //-4
    ~-3.14 //2
    所以双~运算符,可以用来取整(是舍弃小数,正数和负数的运算结果有点区别,需要留意)
    ~~3.14    //3
    ~~-3.14   //-3
    
  • ^ 按位异或

    运算规则:两个运算数中只有一个是1的时候是1,其余全是0(如果两个全是1,则为0)
    
    交换变量值
    a ^= b; b ^= a; a ^= b;
    
    var a = 1, b = 2; a ^= b; b ^= a; a ^= b;//结果a=2b=1
    判断值是否相等   如果两个数做按位异或运算  如果等于0 代表其两个数相等,不等于0则不等
    1 ^ 1 = 0
    
  • << 左移运算符

    运算规则:运算符<<左移第一个运算数中的所有位,移动的位数由第二个运算数指定。移动的位数应该是
    0到31的数,新的位用0补充,舍弃舍弃第32位的值。
    将一个数左移1位相当于乘2,左移2位相当于乘4,以此类推。
    7<<1   //14
    7<<2   //28
    
    -7<<1  //-14
    -7<<2  //-28
    
  • << 又移运算符

    运算规则:运算符>>右移第一个运算数的所有位,移动的位数由第二个运算数指定。移动的位数应该是
    031的数,舍弃右边移出位,填补左边位由原运算数符号决定,确保结果与原操作符一直。如果第一个
    运算数是正则高位补0,是负则高位补1
    
    一个正数将一个数右移1位,相当于除2(舍弃余数),右移2位相当于除4,
    以此类推(负数会有所不同需要高位补1)
    7>>1   //3
    7>>2   //1