推荐的最佳实践
- 一元+-可以代替Number() 进行类型转换
- !! 和Boolean() 结果一样 — 用来获得当前值的布尔值
- 用 || 赋值, 可以避免给变量赋值 null 或 undefined
- Math.pow()有了自己的操作符**
-
一元操作符
前缀递增递减 ++a —a 变量的值都会在语句被求值之前改变
后缀递增递减 a++ a— 变量的值都会在语句被求值之前改变
let num1 = 2;
let num2 = 20;
let num3 = num1-- + num2;
let num4 = num1 + num2;
console.log(num3); // 22
console.log(num4); // 21
// 第一次num1 并没有改变,还是2,第二次num1才变成了1
+num 标识正值 也可以用于类型转换,可以转换为数字类型 同Number()
-
位操作符 — 二进制
32位整数位 前31位表示整数,最后1位表示符号位(正负) 在位操作的运算中 特殊值NaN 和Infinity 在位操作中都会被当成 0 处理, 不是数值会通过Number()转换成数值
按位非 ~ —- 用于返回数值的补数 ~25 // -26 , 结果是25的负值 - 1,但是位运算符的操作会更快,~~可以与parseInt()表现类似。~是当前值取整取反减一,再次~就还是当前值取反-1,相当于原值。
- 按位与 & —- 将数字转换为2进制后,进行与操作,看留0 还是 1,然后进行计算,全都为1才为1 ,其他为0
- 按位或 | —- 与 “与”一样,只不过,或是有一个为1就为1,全为0才是0
- 按位异或 ^ —- 全都为1 或者0 的时候为 0 ,其他情况都为1
- 左移 << —- 转换为2进制后 向左移动对应位数,用0补位,符号位不算
- 有符号的右移 >> —- 在前面补位0,并不会对符号位有影响。
无符号的右移 >>> —- 在前面补位,会影响到符号位,有较大改变
布尔操作符
逻辑非 ! —- 取当前值的反向布尔值,!! 取当前值的布尔值 与Boolean() 表现一致
- 逻辑与 && —- 一个为false全为false, 当有某一个值的时候在进行后面的操作
逻辑或 || —- 一个为true就为true 多用于避免给变量赋值 null 或 undefined
乘性操作符
*
- \
-
指数操作符
—- 可以代替Math.pow() ```javascript console.log(Math.pow(3, 2); // 9 console.log(3 2); // 9
// 指数赋值操作符= let squared = 3; squared = 2; console.log(squared); // 9
<a name="RRwR8"></a>
### 加性操作符
- + --- 可用于拼接字符串
- -
<a name="bsVN3"></a>
### 关系运算符
> NaN跟什么比较都是false,其他比较会把值转换为布尔值之后比较
> 字符串会比较unicode值,如果一方为数字,会把另一边字符串转换为数字比较,否则用unicode值比较
> 字母比较时:注意大小写
- >
- <
- >=
- <=
<a name="f4xhu"></a>
### 相等操作符
- == 比较是否一致
- === 比较类型和数值是否都一致 ---推荐使用
<a name="Cq8pB"></a>
### 条件操作符
```javascript
// 三元运算符
variable = boolean_expression ? true_value : false_value;
赋值操作符
简单赋值用等于号(=)表示,将右手边的值赋给左手边的变量
逗号运算符
let num1 = 1, num2 = 2, num3 = 3; // 进行多个声明
let num = (5, 1, 4, 8, 0); // num 的值为 0 ,取最后一个值
问答题
- The sum of 5 and 10 510 —- +号会被当成字符串拼接,如果需要打印运算结果,需要加(num1 + num2)
- true —- 两个都是字符串需要先进行转换为unicode后比较
- false false —- 因为NaN跟谁比较都是false