4-1  一元操作符
- 递增/递减操作符
- let s1 = "2"; 
- let s2 = "z"; 
- let b = false; 
- let f = 1.1; 
- let o = { 
-  valueOf() { 
-  return -1; 
-  } 
- }; 
- s1++; // 值变成数值 3 
- s2++; // 值变成 NaN 
- b++; // 值变成数值 1 
- f--; // 值变成 0.10000000000000009(因为浮点数不精确)
- o--; // 值变成-2
- let s1 = "01"; 
- let s2 = "1.1"; 
- let s3 = "z"; 
- let b = false; 
- let f = 1.1; 
- let o = { 
-  valueOf() { 
-  return -1; 
-  } 
- }; 
- s1 = -s1; // 值变成数值-1 
- s2 = -s2; // 值变成数值-1.1 
- s3 = -s3; // 值变成 NaN 
- b = -b; // 值变成数值 0 
- f = -f; // 变成-1.1 
- o = -o; // 值变成数值 1
4-2  位操作符
- 负值以一种称为二补数(或补码)的二进制编码存储
- (1) 确定绝对值的二进制表示(如,对于-18,先确定 18 的二进制表示);
- (2) 找到数值的一补数(或反码),换句话说,就是每个 0 都变成 1,每个 1 都变成 0;
- (3) 给结果加 1。
- let num = -18; 
- console.log(num.toString(2)); // "-10010"
按位非
- 按位非的最终效果是对
- 数值取反并减 1,就像执行如下操作的结果一样:
- let num1 = 25; 
- let num2 = -num1 - 1; 
- console.log(num2); // "-26"
按位与
- 都是1才是1
- 25 和 3 的按位与操作的结果是 1。为什么呢?看下面的二进制计算过程:
-  25 = 0000 0000 0000 0000 0000 0000 0001 1001 
-  3 = 0000 0000 0000 0000 0000 0000 0000 0011 
- --------------------------------------------- 
- AND = 0000 0000 0000 0000 0000 0000 0000 0001 
- 如上所示,25 和 3 的二进制表示中,只有第 0 位上的两个数都是 1。于是结果数值的所有其他位都
- 会以 0 填充,因此结果就是 1。
按位或
- 都是0才是0
- 可见 25 和 3 的按位或操作的结果是 27:
-  25 = 0000 0000 0000 0000 0000 0000 0001 1001 
-  3 = 0000 0000 0000 0000 0000 0000 0000 0011 
- --------------------------------------------- 
-  OR = 0000 0000 0000 0000 0000 0000 0001 1011
按位异或
- 一样就为1
- 可见,25 和 3 的按位异或操作结果为 26,如下所示:
-  25 = 0000 0000 0000 0000 0000 0000 0001 1001 
-  3 = 0000 0000 0000 0000 0000 0000 0000 0011 
- --------------------------------------------- 
- XOR = 0000 0000 0000 0000 0000 0000 0001 1010
4-3  布尔操作符
- 布尔操作符一共有 3 个:逻辑非、逻辑与和逻辑或。
非
- console.log(!false); // true 
- console.log(!"blue"); // false 
- console.log(!0); // true 
- console.log(!NaN); // true 
- console.log(!""); // true 
- console.log(!12345); // false
与
- let found = true; 
- let result = (found && someUndeclaredVariable); // 这里会出错
- console.log(result); // 不会执行这一行
或
- let found = true; 
- let result = (found || someUndeclaredVariable); // 不会出错
- console.log(result); // 会执行