• 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()方法,然后依照前面的规则对其进行转换

  • 相关阅读:
    Rose 公司系统高可用性解决方案比较
    时序数据库有哪些特点? TimescaleDB时序数据库介绍
    EterneMirrorHA简介
    SpringBoot无法访问接口,报错:This application has no explicit mapping for /error, so you are seeing this as a fallback.
    druid对数据库密码进行加密解密
    Intellij Idea新建 SpringBoot 项目
    IDEA启动项目报错:Caused by: java.io.FileNotFoundException: class path resource [.properties] cannot be opened because it does not exist
    Dubbo添加过滤器(二)日志打印接口耗时
    SpringBoot2.X整合集成Dubbo
    shell 脚本执行带参数的hivesql
  • 原文地址:https://www.cnblogs.com/PolarisSky/p/5287603.html
Copyright © 2020-2023  润新知