Skip to content

JavaScript 数据类型转化

类型转化的方向就三个,分别是:转布尔、转数字、转字符,通常是所有基础类型外加空数组和空对象,转布尔、转数字、转字符,同时转化又分为强转和弱转

强转:使用 Boolean()、Number()、String() 构造函数就行转化,除此外使用 parseInt 强制整数 parseFloat 强制转小数

弱转:大于小于等于不等于、加减乘除取模、if()、while() 方法

强制类型转化

shell
1. Number() 转数字规则
   String --- 数字类型字符串转数字,非数字转 NaN,空字符转 0
   Boolean --- true 1,false 0
   Undefined --- NaN
   Null --- 0
   Symbol --- 报错异常
   [] --- 0
   {} --- NaN
2. Sting() 转字符串规则
   Object --- '[object Object]'
   [] --- ''
   非空数组 --- 去掉所有 [] 后的内容拼接起来转为字符串,对象还是转为 [object Object] 字符串
   其他类型全部转化为字符串
3. Boolean() 转化规则
   String --- 除了空字符串为 false,其他都为 true
   Number --- 除了 0 +0 -0,NaN,其他都为 true
   Undefined --- false
   Null --- false
   Symbol --- true
   Object --- true
   [] --- true
4. parseInt() 转化相对宽松(起初遇到数字或者数字字符串就转化为数字,如果开始没有遇到则转为 NaN)
   parseInt('12ab123) 结果为 12
   parseInt('ab123) 结果为 NaN

隐式类型转化

  1. 发生自动类型转化的场景和转化方向
shell
1. 比较运算符:== != > <
俩普通类型:转 Number 再比较
俩引用类型:比较引用地址
普通和引用类型:先把引用类型化为原始再比较,原始值转化过程:obj.valueOf().toString()
注意:对象的原始值是'[object Object]',而数组的原始值则不同,需要去掉[]再转化为字符串,比如: [] --> [] --> '' --> 0 ,也就是:0 == [],结果为 true
2. 算数运算符:+ - * / %
+ 遇到字符串计算会转字符串
其他 转数值
3. 条件语句:if() while()
 Boolean
  1. 转化规则与强制规则相同

注意事项

  • 0、null、undefined 不能作为除数,否则结果为非数字类型,即:NaN、Infinity
  • 精度丢失
shell
0.1 + 0.2 !== 0.3
js 不能准确存储超过16位的数字,否则后面的会丢失精度
整数不丢失精度的范围 -2^53+1到2^53-1,大概是 16
超过 2^53-1 的数值可以用 bigInt 类型表示
  • null == undefined 结果为 true,这是一个特列,除此以外 null 和 undefined 只与自身相等
  • NaN 与任何都不想等,包括自身
  • Symbol类型参与><+-运算比较会抛异常:TypeError, 但是可以使用 == === 比较,没啥意义因为其只与自身相等
  • 两个引用类型比较,比较的是引用地址是否相同