说难也不难, 记录一下类型转换的易错点
更新线
[2019-3-7]
Added
- 补充
+、-|*|/类型转换规则 - 新增
==转换规则
[2019-3-10]
Added
- 新增
+法转换规则
[2019-3-12]
Changed
- 更改
'+'运算符相关法则
[2019-10-16]
Changed
- 更新
'+' 运算符的基本规则
记录
基本转换
| Number | String | Boolean | |
|---|---|---|---|
| number | number | ‘number’ | true(0 -> false) |
| string | ‘’ -> 0, ‘abc’ -> NaN | string | true(‘’ -> false) |
| boolean | false -> 0, true -> 1 | ‘boolean’ | boolean |
| null | 0 | ‘null’ | false |
| undefined | NaN | ‘undefined’ | false |
| 数组 | [] -> 0, [number x 1] -> number, NaN | [].join(‘,’) | true |
| 对象 | NaN | [object, Object] | true |
| 函数 | NaN | ‘函数’ | true |
‘+’运算符
string + any, 后者转化为string, 再相加对象 + any, 前者(该对象)转化为string, 根据上一条相加number + null -> numbernumber + undefiend -> NaNnumber + symbol -> error
除了’+’运算符
- 统一调用
Number()显式转换 - 只要其中一方为数字, 另一方会被转为数字
‘==’操作符
- 一方为
boolean, 将其转化为number. - 一方为
string, 另一方为number, 将string转化为number - 一方为对象, 另一方不是, 调用对象的
valueOf()方法, 沿用上述规则 - 一方为
NaN, 返回false - 双方都为
对象, 比较他们是不是指向同一个对象 - null == undefined