神奇的运算符

运算符不止于判断、计算

阿啵呲嘚

话说,突然想了解位运算,于是, 查询了一些资料。
了解到平时的数值运算其实是要先转换为二进制再进行运算, 而位运算是直接进行二进制运算的。所以, 厉害了~ ~ ~

&按位与

&与&& 类似, 条件都为true时, 才为true
例:运算时 二进制位数比对, 都为1时才为1

十进制 / 二进制十进制 / 二进制十进制 / 二进制十进制 / 二进制十进制 / 二进制
1/00011/00012/00103/00115/0101
2/00103/00113/00114/01006/0110
&0/00001/00012/00100/00004/0100

且 十进制转换为二进制后, 末位数为1即奇数, 末位数为0即偶数。
所以可以用一个数和1进行按位&来判断是否为偶数

1
2
3
function assert(n) {
return n&1 ? '奇数' : '偶数';
}

|按位或

|与|| 类似, 其中一个为true的时候结果就为true

十进制 / 二进制十进制 / 二进制十进制 / 二进制十进制 / 二进制十进制 / 二进制
1/00011/00012/00103/00115/0101
2/00103/00113/00114/01006/0110
|3/00113/00113/00117/01117/0111

由于浮点数不支持位运算, 所以自动转换为整数, 再进行运算。
因为这个特性, 可以取巧, 用来做向下运算(math.floor)

1
console.log(1.23|0); //1

还有更多的, 之后再说

&&

&& 当&&之前的条件为 true 时执行&&之后的代码。

用例

&& 用于简短的判断

1
2
3
4
5
let name = document.getElementById('name');
name && clearValue(name); // 条件为真 方法执行
function clearValue(input){
input.value='';
}

||

|| 当||之前的条件为 false 时执行&&之后的代码。

用例

判断变量是否定义, 没有定义则赋一个初始值

var num = num || 0;

|| & &&

简化switch

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
let condition = Math.ceil(Math.random()*5), color;
switch (condition) {
case 0:
color = '红艳艳';
break;
case 1:
color = '黑乎乎';
break;
case 2:
color = '黄灿灿';
break;
case 3:
color = '绿油油';
break;
default:
color = '五颜六色';
break;
}

等于

1
2
let condition = Math.ceil(Math.random()*5);
let color = (condition==0 && '红艳艳') || (condition==1 && '黑乎乎') || (condition==2 && '黄灿灿') || (condition==3 && '绿油油') || '五颜六色';

等于

1
2
let condition = Math.ceil(Math.random()*5);
let color = {'0': '红艳艳', '1': '黑乎乎', '2': '黄灿灿', '3': '绿油油'}[condition] || '五颜六色';

完美~~~

之后发现了再补~ ~ ~