类型转换
显式转换
原始值 / 转换目标 | 布尔值 | 字符串 | 数字 |
---|---|---|---|
Number | 除 0, -0, NaN 都为 true | 0 => "0" | -- |
String | 除空字符串外都为 true | -- | NaN / 数字 |
Boolean | -- | "true" / "false" | true => 1 false => 0 |
Undefined | False | "undefined" | NaN |
null | False | "null" | 0 |
Symbol | True | let sym = Symbol(1); => "Symbol(1)" | 报错 |
函数 | True | function func(){}; => "function func(){}" | NaN |
数组 | True | [] => "" ; [1, 2] => "1, 2" | 首先将数组转换成字符串, 再将字符串转为数字 |
对象 | True | "[object Object]" | NaN |
隐式类型转换
- 算数运算符 (+、-、*、/ 、++、--、%...)
- '+'作为一个双目运算符: 若 + 存在一个 字符串, 则将另一个值也转为 字符串 来进行字符串拼接。
- 其他情况下都将参数转换为 数值 类型进行运算
- 关系运算符 (>、<、==、!、!= )
- =、!: 同时比较类型和值。
- ==、 !=:
- 只比较值,不比较类型。 引用类型比较引用关系
- 布尔值 与数字, 字符串比较时, 会将本身转换为数字在进行比较
- NaN 不等于 NaN, Symbol 不等于 Symbol
- ! : 将其后的变量会表达式转换为 布尔值
- 字符串比较大小: 会从头开始比较每个字符的 unicode 编码,
- 其余情况均转为数值类型
结尾小问题:
-
结合上面的内容 [] == ![] 的输出结果是什么呢?
-
上面有提到 双目运算符, 那么在单目符中 var a = 1; a++ 是否== ++a 呢?
评论区给你你答案 😀😀