JS数据类型转换

当操作符两边的操作数类型不一致或者不是基本类型(也叫原始类型)时,需要进行类型转化。

隐式转换规则:
  1. 转成string类型: +(字符串连接符)
  2. 转成number类型:++ / – (自增自减运算符)、+ - * / %(算术运算符)、 > <、 >= <=、 == != 、=== !=== (关系运算符)
  3. 转成boolean类型:!(逻辑非运算符)
关系运算符的隐式转换:
知识点:
1、当关系运算符左右有一边是字符串时,会把其他数据类型转换成 Number 之后再比较关系
2、当关系运算符两边都是字符串时,会按照字符串对应的unicode编码转成number比较关系
3、多位字符串比较规则:先比较第一位,不等则出结果,相等则继续比较第二位,依次执行

实例:
1'2' > 10 //false
2'2' > '10' //true
3'abc' > 'cba' //false
4'abc' > 'aa' //true

解释:
1、Number('2') = 2
2'2'.charCodeAt() = 50, '10'.charCodeAt() = 49
3'a'.charCodeAt() = 97, 'b'.charCodeAt() = 98, 'c'.charCodeAt() = 99
4、见3
复杂类型的隐式转换:

非原始类型的数据,通过ToPrimitive() 将值转换成原始类型

ToPrimitive(input, PreferredType?)
该抽象操作接受两个参数:要转换的值input和转换目标类型PreferredType(可选);
该抽象操作的目的是把参数input转化为原始数据类型;
如果input可以同时转化为多个原始数据,那么会优先参考PreferredType的值;
针对没有PreferredType的情况:如果input为Date类型,则PreferredType被设置为String,其他情况,PreferredType被设置为Number处理;

如果input是原始数据类型,则该方法返回input自身,否则执行下述步骤转换

  1. 转换的数据类型是number(PreferredType == Number)
    1、如果当前值已经是一个原始类型,则直接返回它
    2、否则,如果当前值是一个对象,则先调用valueOf()方法,如果结果是原始类型则直接返回
    3、否则,调用这个对象的toString()方法,如果结果是原始类型,则返回toString()结果
    4、否则,抛出TypeError异常
    
  2. 转换的数据类型是String(PreferredType == String)
    1、如果当前值已经是一个原始类型,则直接返回它
    2、否则,如果当前值是一个对象,则先调用toString()方法,如果结果是原始类型则直接返回
    3、否则,调用这个对象的valueOf()方法,如果结果是原始类型,则返回valueOf()结果
    4、否则,抛出TypeError异常
    
实践:
知识点:
1、关系运算符:会把其他数据类型转换成 Number 之后再比较关系
2、以下值转化为Boolean结果为false,其余情况均为true
   0,’’,NaNfalsenull,undefined,document.all()
3、逻辑非 > 关系运算符(优先级)

实例:
1[] == false //true
2![] == false //true
3[] == ![] //true
4[] == [] //false
5{} == {} //false
6{} == !{} //false

解释:
1[].valueOf().toString()返回空字符串,Number('')返回0
   Number(false)返回0
2、逻辑非运算符会将值转成boolean类型,Boolean([])返回true,取反, Number(false)返回0
3、结合12,得出true
4、引用类型数据存储在堆中,栈中存储的是地址,所以为false
5、同4
6{}调用.valueOf().toString()返回"[object Object]",Number("[object Object]")返回NaN
   Boolean({})返回true,取反, Number(false)返回0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值