说难也不难, 记录一下类型转换的易错点

更新线


[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