说难也不难, 记录一下类型转换
的易错点
更新线
[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 -> number
number + undefiend -> NaN
number + symbol -> error
除了’+’运算符
- 统一调用
Number()
显式转换 - 只要其中一方为数字, 另一方会被转为数字
‘==’操作符
- 一方为
boolean
, 将其转化为number
. - 一方为
string
, 另一方为number
, 将string
转化为number
- 一方为对象, 另一方不是, 调用对象的
valueOf()
方法, 沿用上述规则 - 一方为
NaN
, 返回false
- 双方都为
对象
, 比较他们是不是指向同一个对象 - null == undefined