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

时间:2023-03-09 08:03:53
Javascript学习笔记:2种其他类型转换为数字Number类型的方式

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

 console.log(parseInt('a10'));//NaN
console.log(parseInt('1a0'));//
console.log(parseInt('10a'));//
console.log(parseInt('10'));// console.log(parseFloat('a10.1'));//NaN
console.log(parseFloat('1a0.1'));//
console.log(parseFloat('10a.1'));//
console.log(parseFloat('10.1a'));//10.1
console.log(parseFloat('10.1'));//10.1

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

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

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

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

 function Person1(name,age){
this.name=name;
this.age=age;
} function Person2(name,age){
this.name=name;
this.age=age;
//重写toString方法
this.toString=function(){
return this.age;
}
} var p1=new Person1('张三',24);
var p2=new Person2('张三',24); console.log(p1.toString());//[object Object]
console.log(parseInt(p1));//NaN console.log(p2.toString());//
console.log(parseInt(p2));//

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

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

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

 console.log(+'a10');//NaN
console.log(+'1a0');//NaN
console.log(+'10a');//NaN
console.log(+'10');// console.log(+'a10.1');//NaN
console.log(+'1a0.1');//NaN
console.log(+'10a.1');//NaN
console.log(+'10.1a');//NaN
console.log(+'10.1');//10.1

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

 console.log(Number('a10'));//NaN
console.log(Number('1a0'));//NaN
console.log(Number('10a'));//NaN
console.log(Number('10'));// console.log(Number('a10.1'));//NaN
console.log(Number('1a0.1'));//NaN
console.log(Number('10a.1'));//NaN
console.log(Number('10.1a'));//NaN
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()方法,然后依照前面的规则对其进行转换