js类型转换

186 阅读2分钟

转换规则

在js中,类型转换只有3种,分别是:

  • 转换为boolean
  • 转换为string
  • 转换为number
原始类型 目标类型 转换规则
number boolean 除了0,-0,NaN,都为true
string boolean 除了空串都为true
undefined,null boolean false
引用类型,symbol boolean true
number string 数字对应的字符串
boolean,function,symbol string 对应的代码
array string [1,2,[3,4,[5,6]],7]=>'1,2,3,4,5,6,7'
object string '[object Object]'
string number 如果字符串对应是合法数字则直接转换,否则转为NaN
array number 空数组为0;仅有一个数字则转为该数字;否则为NaN
null number 0
引用类型(数组除外) number NaN
Symbol number 报错

对象转原始类型

先调用valueOf方法,如果结果不是原始值,那么再调用toString方法

不同类型对象的valueOf()方法的返回值

对象 返回值
array 数组对象本身
boolean 布尔值
date 存储的时间是从 1970 年 1 月 1 日午夜开始计的毫秒数 UTC
function 函数本身
number 数字本身
object 默认情况下为对象本身
string 字符串值
math,error valueOf方法

参考MDN

使用==运算符时发生的转换

==两侧数据类型一样时,直接进行数值比较;不一样的话,就会发生类型转换,规则如下:

  1. 判断两侧是不是nullundefined,是的话就返回true
  2. 判断两侧是否是stringnumber,是的话就将string转换为number
  3. 如果两侧有一方是boolean,那么将boolean转换为number再进行比较
  4. 如果一侧是object另一侧不是,则将其转为原始类型再进行比较
  5. 如果两边都是object,则比较二者地址

例 []==![]

  1. !的优先级高于==,因此先运算右边,[]要转换为boolean,即true![]就是false,问题变为[]==false
  2. 根据规则3,false要被转换为0,即[]==0
  3. 根据规则4,将[]转换为原始类型,得到空字符串
  4. 根据规则2,空字符串将转为数字0,问题最终变为0==0,返回true

例 {}==!{}

  1. !的优先级高于==,因此先运算右边{}要转换为boolean,即true!{}就是false,问题变为[]==false
  2. 根据规则3,false要转换为0,即[]==0
  3. 根据规则4,{}转换为原始类型,得到字符串[object Object]
  4. 根据规则2,将字符串转为数字NaN,问题最终变为NaN==0,返回false