JS之数据类型强制转换

这是我参与更文挑战的第21天,活动详情查看: 更文挑战

强制类型转换

强制类型转换方式包括Number()parseInt()parseFloat()toString()String()Boolean(),这些方法都比较相似,就是通过自身的方法来进行数据类型的强制转换。

Number()强制转换

  • 布尔值,true转换为1,false转换为0
  • 数字返回自身。
  • null返回0
  • undefined返回NaN
  • 如果是字符串
    • 如果字符串中只包含数字(或是0x/0X开头数字可以有正负)将其转换为十进制
    • 如果字符串中包含有效的浮点格式,转化为浮点数
    • 如果是空字符串,转换为0
    • 如果不是以上的,返回NaN
  • 如果是Symbol,抛出错误
  • 如果是对象,并且部署了[Symbol.toPrimitive],调用对象的valueOf()方法,然后根据前面的规则转换返回的值,如果转换的结果是NaN,那么调用对象的toString方法,再次按前面的顺序返回对应的值。
Number(true);        // 1
Number(false);       // 0
Number('0111');      //111
Number(null);        //0
Number('');          //0
Number('1a');        //NaN
Number(-0X11);       //-17
Number('0X11')       //17
复制代码

Boolean()方法的强制转换规则

undefined, null, false, ”, 0(+0,-0), NaN转换的是false,其他转换的都是true。

Boolean(0)          //false
Boolean(null)       //false
Boolean(undefined)  //false
Boolean(NaN)        //false
Boolean(1)          //true
Boolean(13)         //true
Boolean('a')       //true
复制代码

parseInt()

直接转换

parseInt("1234blue");   //returns   1234
parseInt("0xA");   //returns   10
parseInt("22.5");   //returns   22
parseInt("blue");   //returns   NaN
复制代码

根据进制转换

parseInt("AF",   16);   //returns   175
parseInt("10",   2);   //returns   2
parseInt("10",   8);   //returns   8
parseInt("10",   10);   //returns   10
复制代码

parseFloat()

跟parseInt()基本一样,不过是转换浮点数,但是没有进制转换的功能

parseFloat("1234blue");   //returns   1234.0
parseFloat("0xA");   //returns   NaN
parseFloat("22.5");   //returns   22.5
parseFloat("22.34.5");   //returns   22.34
parseFloat("0908");   //returns   908
parseFloat("blue");   //returns   NaN
复制代码

toString()

对于原始类型,null转化成”null” , undefined转换成 “undefined”, true转换成“true”, false转化成“false”, 数字除了极大和极小的数字采用指数形式。

var a = 1.07*1000*1000*1000*1000*1000*1000*1000
a.toString()    //"1.07e21"
var b = 15
b.toString() //"15"
复制代码

对普通对象来说,除非自行定义,否则toString()返回内部属性[[Class]]的值,如”[object Object]”

let a = {
 name:"a"
}
a.toString() //"[object Object]"
复制代码

数组对象重写了toString方法,把每个位置的都转换成字符串然后用,拼接

var a = [1,2,3]
a.toString() //1,2,3
复制代码

String()

和toString()的转换基本上是一样的,只不过toString没办法直接转换原始类型,只能转换经过js包装的对象。

11.toString() //报错
String(11) //"11"
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享