JS 数据类型转换规则(二)

avatar
前端工程师 @豌豆公主

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第7天,点击查看活动详情

JS 数据类型转换规则(二)

引言

  • 在前一篇,着重介绍了其他数据类型转数字。这一篇,则会去讲解其他数据类型 转字符串,其他数据类型转布尔值

其他数据类型转字符串

转换规则

基本数据类型,就是用字符串包起来,对象转字符串和上一篇``一样

  • 基本数据类型转字符串: 拿字符串包起来

image.png

  • 对象转字符串

image.png

会走下面三步(1) Symbol.toPrimitive (2) valueOf (3) toString

运算中的字符串转换

"+"号出现在左右两边,其中一边是字符串或者是某些对象,会以字符串的形式拼接

  • “+” 号除数学运算,还可能代表字符串拼接,那到底是运算,还是字符串拼接呢? 我们开看几个demo

image.png 没什么悬念, 就是字符串拼接

image.png 先会进行如下转换

image.png 所以是运算 10 + 10 = 20

image.png

由于不知道是运算还是字符串拼接,所以Symbol.toPrimitive会传入default

image.png 所以是最后的结果是字符串

image.png

会进行如下转换

image.png

"+"号出现在一个值的左边

  1. i++ 一定是数学运算 image.png

i++ 一定是数学运算

  1. +=如果有一方是字符串,则是字符串拼接 image.png

  2. +将字符串转为数字 image.png

其他数据类型转布尔

转换规则

  • 除了'',0, null,undefined,NaN这五个值是false,其余都是true

出现的情况

  • Boolean() 或者 ! / !!

image.png

  • 条件判断

image.png

装箱和拆箱

  • 装箱
let a = 10
console.log(a.toFixed(2)) // '10.00'

基本数据类型不能做成员访问,浏览器会默认会进行装箱操作 new Number(a),将其变为非标准特殊对象,这样就可以访问toFixed了

  • 拆箱
console.log(10 + new Number(10)) / 20

在操作过程中,浏览器会默认吧new Number(10),进行 <Symbol.toPrimitive, valueOf,toString> 将new Number(10)变为基本数据类型,这个过程叫做拆箱操作