zoukankan      html  css  js  c++  java
  • Js将字符串转数字的方式

    Js将字符串转数字的方式

    Js字符串转换数字方方式主要有三类:转换函数、强制类型转换、弱类型隐式类型转换,利用这三类转换的方式可以有5种转换的方法。

    parseInt()

    parseInt()Number.parseInt()是最常用的转换字符串为整数数值的方法,其中Number.parseInt()ES6之后为了减少全局方法的定义才增加的静态方法,实质与全局方法parseInt()相同,他们的规则如下:

    • 忽略字符串前面的空格,直至找到第一个非空字符。
    • 如果第一个非空字符不是数字或者是正负号则返回NaN
    • 如果第一个是数字字符一直解析到一个非数字字符。
    • 如果第一个是数字字符,能识别出各种整数格式。
    • 接受第二个参数,即转换时使用的基数。
    • 小数向下取整。
    console.log(Number.parseInt(true));        // NaN
    console.log(Number.parseInt(false));       // NaN
    console.log(Number.parseInt(null));        // NaN
    console.log(Number.parseInt(undefined));   // NaN
    console.log(Number.parseInt(NaN));         // NaN
    console.log(Number.parseInt("   123"));    // 123
    console.log(Number.parseInt(" ab123"));    // NaN
    console.log(Number.parseInt(""));          // NaN
    console.log(Number.parseInt(" 31avs"));    // 31
    console.log(Number.parseInt("0xF"));       // 15
    console.log(Number.parseInt("070"));       // es3->56 es5->70
    console.log(Number.parseInt("A", 16));     // 10
    console.log(Number.parseInt("A"));         // NaN
    console.log(Number.parseInt("51.2"));      // 51
    console.log(Number.parseInt("-51.2"));     // -51
    

    parseFloat()

    parseFloat()Number.parseFloat()是最常用的转换字符串为浮点数数值的方法,其中Number.parseFloat()ES6之后为了减少全局方法的定义才增加的静态方法,实质与全局方法parseFloat()相同,他们的转换规则如下:

    • 忽略字符串前面的空格,直至找到第一个非空字符。
    • 如果第一个非空字符不是数字或者是正负号则返回NaN
    • 如果第一个是数字字符一直解析到一个非数字字符。
    • 字符串中第一个小数点是有效的第二个小数点是无效的。
    • 只解析10进制,不接受第二个参数。
    console.log(Number.parseFloat(true));            // NaN
    console.log(Number.parseFloat(false));           // NaN
    console.log(Number.parseFloat(null));            // NaN
    console.log(Number.parseFloat(undefined));       // NaN
    console.log(Number.parseFloat(NaN));             // NaN
    console.log(Number.parseFloat("123"));           // 123
    console.log(Number.parseFloat("  123.1"));       // 123.1
    console.log(Number.parseFloat("  ab123.1"));     // NaN
    console.log(Number.parseFloat(""));              // NaN
    console.log(Number.parseFloat("  123.3.4eqw"));  // 123.3
    console.log(Number.parseFloat("0xF"));           // 0
    

    Number()

    Number()构造函数会返回一个字面量值,而使用new Number()则会返回一个数字对象,他们的转换规则如下:

    • 如果是Boolean值,truefalse分别返回10
    • 如果是数字,只是单纯的传入和返回。
    • 如果是null,则返回0
    • 如果是undefined返回NaN
    • 如果是字符串且字符串为空则返回零,忽略前导零。
    • 如果是字符串且字符串为整数则返回整数,忽略前导零。
    • 如果是字符串且字符串为浮点数则返回浮点数。
    • 如果是字符串且字符串为16进制,转为10进制返回。
    • 除以上格式返回NaN
    • 如果是对象,则调用对象的valueOf,按照前面的规则返回值,如果返回NaN,再调用toString(),按照前面的规则返回值。
    console.log(Number(true));        // 1
    console.log(Number(false));       // 0
    console.log(Number(null));        // 0
    console.log(Number(undefined));   // NaN
    console.log(Number(NaN));         // NaN
    console.log(Number(""));          // 0
    console.log(Number("123"));       // 123
    console.log(Number("  123"));     // 123
    console.log(Number("123.12"));    // 123.12
    console.log(Number("0xF"));       // 15
    

    位运算

    位运算是直接对二进制位进行计算,它直接处理每一个比特位,是非常底层的运算,好处是速度极快,缺点是很不直观。位运算只对整数起作用,如果一个运算数不是整数,会自动转为整数后再运行。在JavaScript内部,很多时候数值都是以64位浮点数的形式储存,但是做位运算的时候,是以32位带符号的整数进行运算的,并且返回值也是一个32位带符号的整数。

    console.log(~~(true));        // 1
    console.log(~~(false));       // 0
    console.log(~~(null));        // 0
    console.log(~~(undefined));   // 0
    console.log(~~(NaN));         // 0
    console.log(~~(""));          // 0
    console.log(~~("123"));       // 123
    console.log(~~("  123"));     // 123
    console.log(~~("123.12"));    // 123
    console.log(~~("0xF"));       // 15
    

    一元运算符

    一元运算符可以将字符串进行隐式的类型转换,与其它的解析方式不同,如果是一个NaN值,那么返回的也是NaN,通常使用+操作符,因为这个方式不容易混淆。

    console.log(+(true));        // 1
    console.log(+(false));       // 0
    console.log(+(null));        // 0
    console.log(+(undefined));   // NaN
    console.log(+(NaN));         // NaN
    console.log(+(""));          // 0
    console.log(+("123"));       // 123
    console.log(+("  123"));     // 123
    console.log(+("123.12"));    // 123
    console.log(+("0xF"));       // 15
    

    每日一题

    https://github.com/WindrunnerMax/EveryDay
    

    参考

    https://www.jianshu.com/p/7962deab3cea
    https://juejin.im/post/6855129005897711624
    https://blog.fundebug.com/2018/07/07/string-to-number/
    
  • 相关阅读:
    Jsp语法、指令及动作元素
    java之Cookie详解
    servlet请求转发、包含以及重定向
    20181114_特性
    20181114_反射_泛型反射
    20181112_反射基础_对象获取
    20181110_wait和async
    20181106_线程之异常_取消_变量_安全Lock
    20181105_线程之Task
    20181104_C#线程之Thread_ThreadPool_使用Thread实现回到和带参数的回调
  • 原文地址:https://www.cnblogs.com/WindrunnerMax/p/14101781.html
Copyright © 2011-2022 走看看