运算符 | 名称 | 解释 |
&& | 与(短路运算) | 若左侧为 false,则取左侧的值,否则取右侧的值 |
|| | 或(短路运算) | 若左侧为 true,则取左侧的值,否则取右侧的值 |
! | 非(短路运算) | 若值为 true,则将结果取反 |
& | 按位与 | 两个全为 1,结果为 1,否则为 0 |
| | 按位或 | 两个有一个为 1,结果为 1,否则为 0 |
^ | 按位异或 | 两个有一个为 0 ,一个为 1,结果为 1,否则为 0 |
>> | 右移运算 | 低位溢出,符号不变,并用符号位补溢出的高位 |
<< | 左移运算 | 符号位不变,低位补 0 |
&&(短路与)
let a = 4, b =7, result;
// 因为 a > b 为 false,所以不执行 a + b
result = a > b && a + b; // false
// 因为 a < b 为 true,则执行 a + b
result = a < b && a + b; // 11
||(短路或)
let a = 4, b =7, result;
// 因为 a > b 为 false,则执行 a + b
result = a > b || a + b; // 11
// 因为 a < b 为 true,所以不执行 a + b
result = a < b || a + b; // true
!(短路非)
let a = 4, b =7, result;
result = a > b;
console.log(result); // false
console.log(!result); // true
&(按位与)
按位运算需要将数据从十进制转成二进制,才可以进行运算
let a = 12, b = 32, result;
// 12 的二进制数为 0000 1100
// 32 的二进制数为 0010 0000
// 因为 按位与 运算符是若两个对应的二进制数为 1 ,结果为 1,否则为 0;所以结果为 0000 0000,而 0 的二进制数为 0000 0000
result = a & b; // 0
|(按位或)
let a = 12, b = 32, result;
// 12 的二进制数为 0000 1100
// 32 的二进制数为 0010 0000
// 因为 按位或 运算符是若两个对应的二进制数有一个数为 1 ,结果为 1,否则为 0;所以结果为 0010 1100,而 44 的二进制数为 0010 1100
result = a | b; // 44
^(按位异或)
let a = 12, b = 32, result;
// 12 的二进制数为 0000 1100
// 32 的二进制数为 0010 0000
// 因为 按位异或 运算符是若两个对应的二进制数一个数为 1,另一个数为 0 ,结果为 1,否则为 0;所以结果为 0010 1100,而 44 的二进制数为 0010 1100
result = a ^ 32; // 44
>>(右移运算符)
let a = 3, result;
// 低位溢出,符号不变,并用符号位补溢出的高位
result = 3 >> 2; // 0
// 3 的二进制数为 0000 0011
// 右移两个位置之后为 0000 0000
<<(左移运算符)
let a = 3, result;
// 符号位不变,低位补 0
result = a << 2; // 12;
// 3 的二进制数为 0000 0011
// 右移两个位置之后为 0000 1100