<<、>>、??、?.、||、^运算符的基本使用

 
 

>>和<<都是位运算符,对二进制数进行移位操作:

 // <<是左移,是将10的二进制左移5位,相当于原数10*2*2*2*2*2,故结果是320
    console.log(10 << 5);
    // <<是左移,是将12的二进制左移2位,相当于原数12*2*2,故结果是48
    console.log(12 << 2);

    //>>是右移,右移一位相当于除以2,4/2,故结果为2,如果>>右边不满足条件,结果为0
    console.log(4 >> 1);

??双问号,空值合并运算符以及||,两者的区别:

 //只要??前面不为null或undefined就取前面的值,否则就取后面的值
    console.log(1 ?? 2);//1
    console.log(12 ?? 3);//12
    console.log(null ?? 2);//2
    console.log(undefined ?? 13);//13

  //0和""在||里被认为false,执行符号后面的结果,null和undefined也是执行后面的结果
    console.log(0 || 2);//2
    console.log("" || 3);//3
    console.log(null || 4);//4
    console.log(undefined || 5);//5
  //在??里却执行前面的,这是??和||的区别
    console.log("" ?? 3);//""
    console.log(0 ?? 4);//0

?.可选链操作符:

 const obj = { a: { b: [{ name: "张三" }] } }
    // 原始写法
    console.log(obj && obj.a && obj.a.b && obj.a.b[0].name);//张三
    //可选连写法
    console.log(obj?.a?.b[0]?.name);//张三

^异或符的使用:

console.log(10 ^ 3);//9
    console.log(1 ^ 2);//3
    console.log(12 ^ 6);//10
    console.log(6 ^ 3);//5
    console.log(32 ^ 16);//48
    //两二进制上下比较只有位不相等时才取1,否则取零
    //14 二进制1110
    //15 二进制1111
    //^与后的结果 0001=>结果是1
    console.log(14 ^ 15);//1
    //相同的数异或为0:n^n=>0
    console.log(3 ^ 3);//0
    console.log(10 ^ 10);//0
    console.log(100 ^ 100);//0
    //交换律:a^b^c <=> a^c^b
    console.log(2 ^ 3 ^ 2 ^ 4 ^ 4);//2 ^ 2  ^ 4 ^ 4 ^ 3  =>  0 ^ 0 ^3  => 3
    //任何数为0异或任何数:0^n=>n
    console.log(0 ^ 6);//6
    console.log(120 ^ 0);//120

Guess you like

Origin blog.csdn.net/qq_72760247/article/details/128747302