Js将字符串转数字的方式

Js将字符串转数字的方式

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

parseInt()#

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

  • 忽略字符串前面的空格,直至找到第一个非空字符。
  • 如果第一个非空字符不是数字或者是正负号则返回NaN
  • 如果第一个是数字字符一直解析到一个非数字字符。
  • 如果第一个是数字字符,能识别出各种整数格式。
  • 接受第二个参数,即转换时使用的基数。
  • 小数向下取整。
Copy
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进制,不接受第二个参数。
Copy
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(),按照前面的规则返回值。
Copy
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位带符号的整数。

Copy
// ~~ 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 // << console.log(true << 0); // 1 console.log(false << 0); // 0 console.log(null << 0); // 0 console.log(undefined << 0); // 0 console.log(NaN << 0); // 0 console.log("" << 0); // 0 console.log("123" << 0); // 123 console.log(" 123" << 0); // 123 console.log("123.12" << 0); // 123 console.log("0xF" << 0); // 15 // >> console.log(true >> 0); // 1 console.log(false >> 0); // 0 console.log(null >> 0); // 0 console.log(undefined >> 0); // 0 console.log(NaN >> 0); // 0 console.log("" >> 0); // 0 console.log("123" >> 0); // 123 console.log(" 123" >> 0); // 123 console.log("123.12" >> 0); // 123 console.log("0xF" >> 0); // 15

一元运算符#

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

Copy
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

每日一题#

Copy
https://github.com/WindrunnerMax/EveryDay

参考#

Copy
https://www.jianshu.com/p/7962deab3cea https://juejin.im/post/6855129005897711624 https://blog.fundebug.com/2018/07/07/string-to-number/
posted @   WindRunnerMax  阅读(6086)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示
CONTENTS