现在的位置: 首页 > 综合 > 正文

JavaScript中各种转换规则记录

2011年04月18日 ⁄ 综合 ⁄ 共 2826字 ⁄ 字号 评论关闭

阅读目录

前言

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’

抱歉!评论已关闭.