请先阅读 javascript基础 —— 类型转换 - 掘金 (juejin.cn)体验更佳!
你真的了解javascript的运算规则吗?
null + undefined 为什么结果是 NaN呢?
[] === ![] 是false ,[] == ![] 为什么是true呢?
[] + {} 为什么结果是 '[object Object]' ,而 {} + [] 结果是0呢?
相信看了下面的内容你就会有答案!
算术运算
+,-,*,/,%,++,--
- 先转为原始类型
- x + y。有一个是字符串则转为字符串拼接
- NaN和任何类型运算结果都是NaN
- 两端均不是字符串,转化为数字然后运算
比较运算
<,>,<=,>=,==,===,!=,!==
运算符 | 规则 |
---|---|
<,>,<=,>= (运算符两端先转化为原始类型) | 转换为数字。然后比较 |
两端全是字符串,比较Unicode 字符编码 | |
两端存在NaN一定是false | |
=== | 类型和值必须都相同 |
两端存在NaN一定是false | |
== | 类型相同,比较值 |
两端都是原始类型,转化成数字比较 | |
一端是原始类型,一端是对象类型,把对象转换成原始类型后比较 | |
undefined 和 null 只有 自身比较 和 相互比较 才会返回true | |
两端存在NaN一定是false | |
!=,!== | 对相等取反 |
逻辑运算
!,&&,||,?:(三元运算)
运算时都会先转为布尔值。
运算符 | 规则 |
---|---|
x && y | x为false,返回x |
x为true,返回y | |
x || y | x为false,返回Y |
x为true,返回x |
特殊的{}
{}在语句(Statement)中会被执行为成空的block
{}在表达式(expression)中会被执行为空的Object
例如我们直接写 {} + 1 其实就相当于 , +1。
但是我们这样写 ({} + 1) 那他就是个表达式 他的结果就是 "[object Object]1"