数据类型转换
js的数据类型只有三种情况:
1、转换为布尔值
2、转换为数字
3、转换为字符串
初始值 | 转换类型 | 结果 |
number | boolean | 除了0,-0,NaN,其他都为true |
string | boolean | 除了空字符串都为true |
undefine,null | boolean | false |
引用类型 | boolean | true |
boolean,函数,symbol | String | 'true' |
number | String | '5' |
数组 | String | [1,2]=>'1,2' |
对象 | String | '[object,object]' |
String | number | '1'=>1, a=>NaN |
数组 | number | 空数组转换为0,存在一个元素且为数字的转换为数字,其他的转换为NaN |
NULL | number | 0 |
除了数组的引用类型 | number | NaN |
symbol | number | 抛出错误 |
一、对象转转换原始类型
对象在转换类型的时候,会调用内置的【toprimitive】函数,该方法在转换为原始类型调用优先级最高,该函数的算法逻辑为:
1、如果已经是原始类型了,就不需要转换了
2、调用 x.valueOf()
,如果转换为基础类型,就返回转换的值
3、调用x.toString(),如果转换为基础类型,就返回转换的值
4、如果都没有返回原始类型,就报错
二、运算符转换规则
四则运算符特点:
1、如果其中一方为字符串,那么另一方也会被转换为字符串
2、如果一方不是字符串或者数字,就会将它转换成字符串或者数字
!注:对于'a'+ +'b',得到的结果为aNaN,因为+‘b’得到的结果为NaN,类似的可使用+‘1’快速得到number类型。
除了加法运算符,其他的只要一方为数字,则另一方也会被转换为数字。
比较运算符特点:
如果是对象,则使用toprimitive转换类型,如果是字符串,则使用unicode字符索引来比较。
三、强制类型转换
强制转换方法包括Number(),parseInt( ),parseFloat(),toSting(),String(),boolean()
四、隐式类型转换规则
==运算符:
1、如果其中一个为null或者undefine,则 另一方也必须为null或者undefined,才会为true
2、如果其中有symbol,则返回false
3、如果两个值为number和String类型,则会将字符串转换为number。
4、如果其中一个操作值为boolean,则转换成number
+运算符:
+不仅可以用作数字相加,还能用作字符串相连,
1、如果其中一个为字符串,另一个是null,boolean,undefine类型,则调用toString()对字符串进行拼接,如果是纯对象,数组,正则等,则调用对象的转换方法进行拼接
2、如果其中一个为数字,另一个为null,boolean,undefine,则转换成数字,对象也转换成数字相加。
3、如果是一个数字和一个字符串,则按照字符串规则进行拼接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)