Javascript学习笔记:2种其他类型转换为数字Number类型的方式

①使用parseInt()/parseFloat()(在ECMAScript6中是Number.parseInt()/Number.parseFloat()

 1 console.log(parseInt('a10'));//NaN
 2 console.log(parseInt('1a0'));//1
 3 console.log(parseInt('10a'));//10
 4 console.log(parseInt('10'));//10
 5 
 6 console.log(parseFloat('a10.1'));//NaN
 7 console.log(parseFloat('1a0.1'));//1
 8 console.log(parseFloat('10a.1'));//10
 9 console.log(parseFloat('10.1a'));//10.1
10 console.log(parseFloat('10.1'));//10.1

使用parseInt()/parseFloat将非数值类型转换为数值类型的时候:

a、如果是字符串类型,那么会对字符串中的字符逐个进行解析,直至解析到不能解析为数字的字符为止,然后将前面解析的部分转换为数值返回

b、如果是字符串类型以外的非数值类型,那么会首先调用该类型的toString()方法,然后再按字符串的方式进行转换

下面这个例子中,Person1使用默认的toString方法,Person2重写了toString方法。然后对两个类型的实例进行数值转换,结果如下:

 1 function Person1(name,age){
 2     this.name=name;
 3     this.age=age;
 4 }
 5 
 6 function Person2(name,age){
 7     this.name=name;
 8     this.age=age;
 9     //重写toString方法
10     this.toString=function(){
11         return this.age;
12     }
13 }
14 
15 var p1=new Person1('张三',24);
16 var p2=new Person2('张三',24);
17 
18 console.log(p1.toString());//[object Object]
19 console.log(parseInt(p1));//NaN
20 
21 console.log(p2.toString());//24
22 console.log(parseInt(p2));//24

当然parseInt()和parseFloat()也是有区别的,从字面意思就可以看出,parseInt()是将值转换为整型,parseFloat()是将值转换为浮点型,除此之外,两者的转换机制都是一样的。

1 console.log(parseInt('1.5'))//1
2 console.log(parseFloat('1.5'))//1.5

 

②使用‘+’运算符(等同于Number())

 1 console.log(+'a10');//NaN
 2 console.log(+'1a0');//NaN
 3 console.log(+'10a');//NaN
 4 console.log(+'10');//10
 5 
 6 console.log(+'a10.1');//NaN
 7 console.log(+'1a0.1');//NaN
 8 console.log(+'10a.1');//NaN
 9 console.log(+'10.1a');//NaN
10 console.log(+'10.1');//10.1

使用‘+’运算符与使用Number的效果是一样的。实际上,当‘+’运算符后面的部分是非数字时,该操作符会像Number()转型函数一样对后面的值进行转换。下面是使用Number()的结果。

 1 console.log(Number('a10'));//NaN
 2 console.log(Number('1a0'));//NaN
 3 console.log(Number('10a'));//NaN
 4 console.log(Number('10'));//10
 5 
 6 console.log(Number('a10.1'));//NaN
 7 console.log(Number('1a0.1'));//NaN
 8 console.log(Number('10a.1'));//NaN
 9 console.log(Number('10.1a'));//NaN
10 console.log(Number('10.1'));//10.1

当使用‘+’运算符或者Number()函数将非数值类型转换为数值类型的时候:

a、如果非数值类型为Boolean类型时,如果值为true,那么返回1;如果值为false,那么返回0

b、如果非数值类型为String类型时,需要分以下几种情况:

  b1、如果字符串为空,那么直接返回0

  b2、如果字符串全是数字(包括小数),那么直接转换为数值(如果字符串开头为0,则忽略开头的0)

  b3、如果字符串是有效的十六进制格式(即以‘0X’或者‘0x’开头,后面是0~F),那么将其转换为相同大小的十进制数值

  b4、如果字符串包含有上述格式以外的字符,那么直接返回NaN

c、如果非数值类型为null时,那么直接返回0

d、如果非数值类型为undefined时,那么直接返回NaN

e、如果非数值类型为Symbol类型时,则直接抛出异常(TypeError: Cannot convert a Symbol value to a string)

f、如果非数值类型为Object类型时,那么首先会调用对象的valueOf()方法,然后依照前面的规则对其进行转换

 

posted @ 2016-03-17 15:27  北极星空  阅读(401)  评论(0编辑  收藏  举报