javascript基础 —— 运算规则

86 阅读1分钟

请先阅读 javascript基础 —— 类型转换 - 掘金 (juejin.cn)体验更佳!

你真的了解javascript的运算规则吗?

null + undefined 为什么结果是 NaN呢?

[] === ![] 是false ,[] == ![] 为什么是true呢?

[] + {} 为什么结果是 '[object Object]' ,而 {} + [] 结果是0呢?

相信看了下面的内容你就会有答案!

算术运算

+,-,*,/,%,++,--

  1. 先转为原始类型
  2. x + y。有一个是字符串则转为字符串拼接
  3. NaN和任何类型运算结果都是NaN
  4. 两端均不是字符串,转化为数字然后运算

比较运算

<,>,<=,>=,==,===,!=,!==

运算符 规则
<,>,<=,>= (运算符两端先转化为原始类型) 转换为数字。然后比较
两端全是字符串,比较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"