javascript是一门多线程的语言_JavaScript是一门弱类型编程语言,隐式转换,类型转换需要小心!...

点击右上角“关注”,每天进步一点

问题: 类型转换

首先我们要知道,在 JS 中类型转换只有三种情况,分别是:

  • 转换为布尔值
  • 转换为数字
  • 转换为字符串

我们先来看一个类型转换表格,然后再进入正题

9cfd42ee380d03e84caf76e690781588.png

转Boolean

在条件判断时,除了undefined,null,false,NaN,'',0,-0,其他所有值都转为true,包括所有对象。

对象转原始类型

对象在转换类型的时候,会调用内置的[[ToPrimitive]]函数,对于该函数来说,算法逻辑一般来说如下:

  • 如果已经是原始类型了,那就不需要转换了
  • 调用x.valueOf(),如果转换为基础类型,就返回转换的值
  • 调用x.toString(),如果转换为基础类型,就返回转换的值
  • 如果都没有返回原始类型,就会报错

当然你也可以重写Symbol.toPrimitive,该方法在转原始类型时调用优先级最高。

let a = { valueOf() { return 0 }, toString() { return '1' }, [Symbol.toPrimitive]() { return 2 }}1 + a // => 3
7ec99780a8bf71c733e8ce0dc9d0d8ea.png

四则运算符

加法运算符不同于其他几个运算符,它有以下几个特点:

  • 运算中其中一方为字符串,那么就会把另一方也转换为字符串
  • 如果一方不是字符串或者数字,那么会将它转换为数字或者字符串
1 + '1' // '11'true + true // 24 + [1,2,3] // "41,2,3"
3e057cc9764ee618417dd654cedb3068.png

除了加法的运算符来说,只要其中一方是数字,那么另一方就会被转为数字

4 * '3' // 124 * [] // 04 * [1, 2] // NaN
361e95b1d39b54217b31af45668fc7f7.png

比较运算符

  1. 如果是对象,就通过toPrimitive转换对象
  2. 如果是字符串,就通过unicode字符索引来比较
let a = { valueOf() { return 0 }, toString() { return '1' }}a > -1 // true
168cfd8e525af767a1033c40cfabf6a3.png

在以上代码中,因为a是对象,所以会通过valueOf转换为原始类型再比较值。

觉得有收获,记得点击“关注”没有收获,下方评论希望改进的地方
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值