运算符优先级
关于运算符的优先级,存在下面的优先级级别:(因此当我们在表达式中出现下面这些情况的时候, 我们注意符号的优先级). [ ] ( ) | 提取属性与调用函数 (优先级 () > .) |
---|---|
delete new typeof + - ! |
一元运算符 |
* / % |
乘法, 除法, 求余 |
+ - |
加法/ 连接 减法 |
>= <= > < |
不等式运算符 |
=== !== |
等式运算符 |
&& |
逻辑与 |
` | |
?: |
三元 |
&&
> ||
下面是一些使用运算符的一些例子:- 对于点号运算符以及加号运算符
1 | +"2.34567".toFixed(2); |
toFixed()
函数, 当然会出现错误, 解决办法, 添加 ()
因为这时候括号的优先级要高于点号: 1 | (+"2.34567").toFixed(2) |
- 逻辑与的操作符
&&
的操作符优先级要高于||
的操作符优先级。例如对于下面的这个程序而言:注意: 这里对于1
2true || false && false
// 因为这里 && 操作符的优先级要高于 || 因此这里会返回 true||
以及&&
操作符的理解要正确:这两个操作符返回的都是值,而不是true
或者 `false -
[] == ![]
上面这个等式是一个很有意思的等式, 理解这个等式有助于我们加深对于于运算符优先级的理解, 并且在上面的这个公式中还有涉及到了隐式转换的一些知识点。
在上面这个过程中, 因为 `!` 的优先级要高于 `==`, 因此先执行 `!` 进行类型转换, 因为这里 `[]` 是真值,(只要不属于假值的都是真值,你别看我这里是一个空数组)
>通过使用布尔强制类型转换结果为 `false` 的被称作假值, 假值有下面几种:
>
>`undefined`, `null`, `false`, `+0, -0 和 NaN`, " "
>
>ps: 其他的类型不要进来 (`[], {}` : 你们看我干嘛?)
首先执行下面的操作:
1
![] ===> false
这个时候等号右边的值变成了 `false`,这个时候使用 `==` 会进行强制类型转换,将布尔值转换为数字
1
Number(false) ===> 0
这个时候 `==` 两边分别是 `object` 以及 `number` 类型的值, 这个时候需要将 `obejct` 转为数字:
1
Number([].valueOf()) ===> 0
因此, 上面的等式经过转换之后,变成了下面的这种:
1
0 === 0 // true