阅读目录
前言
Boolean转换规则
Number转换规则
String转换规则
Boolean转换规则
结束语
前言
在javascript中,我学习中比较混乱的就是各种数值类型之间的转换,所以写这篇文章作为记录,如果文中有任何不正确的地方,请大家尽量拍砖,相互学习,共同进步。
Boolean转换规则
在javascript中,Boolean是内部的基本包装类型之一,它是一个函数,可以用来构建布尔类型的值:true or false。构建出来的实例,可以调用Boolean提供的方法。除此之外,Boolean也是一个函数,可以用来进行数据转换为布尔值。可以对任何数据类型的值调用Boolean函数,而且都会返回一个Boolean值,具体转换规则如下:
数据类型 | 转换为true的值 | 转换为false的值 |
Boolean | true | false |
String | 任何非空字符串 | “”/’’(空字符串) |
Number | 任何非零数字值(包括无穷) | 0 和NaN |
Object | 任何对象 | Null |
Undefined | 不适用 | Undefined |
Number转换规则
对于数值类型,有3个转换函数:Number、parseInt、parseFloat。Number可以用于任何数据类型,后面两个则专门用于把字符串转换成数值。
Number()转换规则 :
1、 如果是Boolean值,true和false将被转换为1和0;
2、 如果是数字值,就就是简单的传入和返回;
3、 如果是null,则返回0;
4、 如果是undefined,返回NaN;
5、 如果是字符串,遵循下列规则:
1) 如果字符串只包含数字,则转换为十进制值,当然,前导零会被忽略。”000123”->123
2) 如果字符串中包含有效的浮点格式,则转为对应的浮点值,前导零也会被忽略
3) 如果包含有效的十六进制格式,则转为大小相同的十进制数
4) 如果是空的,则转换为0
5) 如果包含除以上格式之外的字符,则将其转换为NaN。
6、 如果是对象,则调用对象的valueOf方法,然后按照前面的规则转换返回的值,如果转换的结果是NaN,则调用对象的toString()方法,再按照前面的规则返回字符串。
这么多规则,光看文字就晕了,看看几个例子:
var num1 = Number(“Hello”);//NaN
var num2 = Number(“”);//0
var num3= Number(“000111”);//111
var num4 = Number(“true”);//1
var num5 = Number(null);//0
var num6 = Number(undefined);//NaN
var num7= Number(22);//22
Number()用来转换实在太复杂了,所以一般会用parseInt和parseFloat。
parseInt()转换规则
parseInt() 会忽略字符串前面的空格,规则如下:
1、 如果是数字,则简单的传入传出,但是浮点数的话,则只取整数部分
2、 如果是字符串,第一个字符不是数字或者符号,则返回NaN,
3、 空字符串,返回NaN
4、 如果第一字符是数字字符,则会继续解析,直到遇到一个非数字字符,
5、 如果字符串是浮点数的形式,也只取整数部分
6、 如果第一个是数字字符,并且符合八进制和十六进制的写法(0和0x),则会相应的当成对应的进制数转换。直到遇到一个非数字字符
看下例子,印象比较深刻
var num1 = parseInt(22);//22
var num2 =parseInt(22.6);//22
var num3= parseInt(“”);//NaN
var num4 = parseInt(“ddd12”);// NaN
var num5 = parseInt(‘124dd’);//124
var num6 = parseInt(‘0xA’);//10
var num7 = parseInt(‘070’);//八进制 56
var num8= parseInt(‘70‘);//十进制 70
var num9= parseInt(‘0xf’);//十六进制 15
也可以明确指定要转换的进制数,只要在第二个参数传入即可
var num1= parseInt(‘0xaf’,16);// 十六进制175
var num2= parseInt(‘af’,16);// 十六进制175 指定进制,就可以不带0x
var num3= parseInt(‘af’);// 单纯字符‘af‘,返回NaN
var num4 = parseInt(‘10’,2);// 2 二进制解析
var num5 = parseInt(‘10’,8);// 8 八进制解析
var num6 = parseInt(‘10’,10);// 10 十进制解析
var num7 = parseInt(‘10’,16);// 16 十六进制解析
var num8 = parseInt(‘010’);// 8 按八进制
var num8 = parseInt(‘010’,8);// 8 按八进制
var num9 = parseInt(‘010’,10);// 10 按十进制
parseFloat转换规则
parseFloat 和parseInt大部分类似,也是从第一个字符开始解析。但是有如下特点
1、 只有第一个小数点有效,第二个小数点无效,因此后面字符串将被忽略
2、 parseFloat只解析十进制,不解析八进制和十六进制,也就是说他会把010解析成10,0xa解析成0
例子:
var num1= parseFloat(‘1456dfd’);// 1456
var num2= parseFloat (‘0xa’);// 0
var num3= parseFloat (’22.5’);//22.5
var num4 = parseFloat (‘1.2.3’);// 1.2
var num5 = parseFloat (‘098.5’);//98.5
var num6 = parseFloat (‘3.21e7’);// 3.2100000
String 转换规则
在javascript中的基本数据类型中大部分都有toString方法,但是null和undefined没有。
数值的toString方法可以传入基数:
var num =10;
alert(num.toString());//’10’
alert(num.toString(2));//’1010’
alert(num.toString(8));//’12’
alert(num.toString(10));//’10’
alert(num.toString(16));//’a’
基于null和undefined没有toString方法,可以使用String(),规则如下:
1、 如果值有toString方法,则调用该方法
2、 如果是null则返回”null”
3、 如果是undefined,则返回’undefined’