声明:本文只是纯总结,范例几近没有,需要验证的童鞋请私下验证,有问题请留言。
js的数据类型
1 基础类型:number、string、null、boolean、undefined、Symbol(es6新增)
2 引用类型:object
ps:本篇主要讲一些基础类型的显式转换
一些显式转换的方法
- Number() 转为数字
*Number(undefined) => NaN (ps: NaN什么都不等)
*Number(null) => 0
*Number(string) => 当字符串含除了数字以外的字符时为NaN,纯数字字符串时返回数字
*Number(object) => 当对象为数组对象时,1、空数组时返回0,2、数组只有一项且这一项为一个数字或者纯数组字符串时返回第一项的数字,其他均为NaN - Boolean()转化为boolean
*返回true或者false,现返回false的只有NaN,‘’,undefined, null,0,false这六种,其余均为true - String() 转为字符串
*基础类型的数据均转为字符串undefined => ‘undefined’, null => ‘null’, true => ‘true’, 对象时{} => ‘[object Object]’, 数组对象时相当于用join(’,’)将数组转换为字符串 - toString(radix) 转为字符串
*1,其不能转换null和undefined
*2,toString()是调用形式的其小括号内可以传参数,只有当转换的数据为数字时,其参数为2 - 36的数字的时候toString()会把这个数字转换为以这个参数为基底的数字字符串 let a = 11, a.toString(8) => ‘13’
*3,其他和String() 一样 - parseInt(str,radix ) 转为整形
*1,parseInt转换是一位位转换的,所以如果是以数字开头的字符串,转化出来时就会取前面的字符串,parseInt
parseInt('123123abc') //123123
*2, 当第一位参数为一个正常的十进制数字或者字符串的时候,第二个参数是2 - 36的数字时,将会把第一个参数以第二个参数为基底转化为十进制的数字,由于parseInt是诸位转化的所以:
parseInt(1123, 2) //3
parseInt('1123abc', 2) //3
parseInt(456, 2) //NaN
*3, 由于浏览器会把以0开头的数字解释为八进制的数字,以0x开头的数字解释为十六进制的数字,当parseInt的第一个参数为0获者0x开头的数字时parseInt会把这个数字先转化为十进制的字符串。然后再以radix为基底转化成十进制的数字:
parseInt(011) // 9
parseInt(011, 2) //先转为parseInt('9', 2) 所以返回NaN 0X开头的同理
注意: 当第一个参数是以0和0x开头的字符串时,parseInt会把其当成一个字符串解释,不会把其当成八进制或者十六进制的数字转化为十进制,只是当成一个正常的字符串
parseInt('0x123123', 2) // 0
- parseFloat() 转为浮点型
*其转化规则和parseInt 1和2的转化规则一致,只不过其会识别 ‘.’ 为数字的小数点。
最后上两个比较典型的面试题
//将一个二进制的1010101011数字转化为16进制?
//parseInt(1010101011, 2).toString(16)
[1, 2, 3].map(parseInt)
// [1, NaN, NaN]
//map有不懂的先去了解下用法