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值,true和false分别返回1或0。 - 如果是数字,只是单纯的传入和返回。
- 如果是
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
// <<
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,通常使用+操作符,因为这个方式不容易混淆。
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/
Js将字符串转数字的方式的更多相关文章
- js区分字符串和数字,有时候需要将字符串转换成数字
js区分字符串和数字,有时候需要将字符串转换成数字 :parseInt
- js中字符串转换为数字
js 字符串转化成数字的三种方法主要有 转换函数.强制类型转换.利用js变量弱类型转换. 1. 转换函数: js提供了parseInt()和parseFloat()两个转换函数.前者把值转换成整数,后 ...
- js 关于字符串转数字及数字保留位数的控制
1.parseInt()和parseFloat()两个转换函数,将字符串转换成相应的数字. 1.parseInt() parseInt进行转换时,将字符串转成相应的整数.浮点数以后的数字都不要了. p ...
- js中字符串,数字之间转换的常用方法
var number={ num:, num1:"2你好" }; //将数字转换为字符串 var str=number.num.toString();//十进制 );//二进制 ) ...
- js中字符串转数字的方法
1.当字符串中是纯数字 例如:var s = '234'; /********** 字符串在运算操作中会被当做数字类型来处理 ***************/ s *= 1; /******* str ...
- JS截取字符串中数字
今天项目中需要在一个字符串中截取一个数字,然后数字参与运算.搜了一下,有好多好用的方式截取字符串. 1,使用parseInt() var str ="4500元"; var num ...
- js将字符串转换为数字等类型
1.js提供了parseInt()和parseFloat()两个转换函数. 2.ECMAScript中可用的3种强制类型转换如下: Boolean(value)——把给定的值转换成Boolean型: ...
- js中字符串转换为数字的方法
parseInt; parseFload; +; parseInt() 和 parseFloat() 函数会尝试逐个解析字符串中的字符,直到遇上一个无法被解析成数字的字符,然后返回该字符前所有数字字符 ...
- JS把字符串转换为数字的方法
方法: (1)Number(),强制类型转换,接受一个参数. (2)parseInt(),把字符串转换为整形数字,可以接受一个或两个参数,其中第二个参数代表转换的基数,能够正确的将二进制.八进制.十 ...
- js的字符串是数字时过长的时候会被截断
JavaScript能表示并进行精确算术运算的整数范围为:正负2的53次方,也即从最小值-9007199254740992到最大值+9007199254740992之间的范围:对于超过这个范围的整数, ...
随机推荐
- 部署开源项目管理工具focalboard
前言 focalboard是一款开源项目管理工具,类似Jira.Trello.官网地址 组件 版本 说明 Debian 12.1 操作系统 docker 20.10.7 容器运行时 docker-co ...
- 【C/C++】sscanf函数和正则表达式
此文所有的实验都是基于下面的程序:char str[10];for (int i = 0; i < 10; i++) str[i] = '!';执行完后str的值为str = "!!! ...
- 【TouchGFX 】使用 CubeMX 创建 TouchGFX 工程时 LCD 显示为雪花屏
经几个晚上折腾,修改大量的LTDC时钟.时序,FMC时序等,结果还是一样,耐心与好使的工程仔细对比,发现是时钟源配置问题,真是冤,聊以此以示纪念 实质上是没有分清有源和无源晶振 无源晶振又被叫做 谐振 ...
- 44从零开始用Rust编写nginx,命令行参数的设计与解析及说明
wmproxy wmproxy已用Rust实现http/https代理, socks5代理, 反向代理, 静态文件服务器,四层TCP/UDP转发,七层负载均衡,内网穿透,后续将实现websocket代 ...
- TLS1.3的简单学习
TLS1.3的简单学习 TLS的历史 From GTP3.5 TLS(传输层安全)是一种加密协议,旨在确保 Internet 通信的安全性和隐私保护.下面是 TLS 的历史概述: SSL(安全套接层) ...
- TiDB恢复部分表的方式方法
TiDB恢复部分表的方式方法 背景 今天同事告知误删了部分表. 因为是UAT准生产的环境, 所以仅有每天晚上11点的备份处理. 同时告知 昨天的数据也可以. 得到认可后进行了 TiDB的单表备份恢复. ...
- [转帖]通过架设Cockpit服务 使用Web浏览器监测管理多个Linux服务器
Cockpit是一个易于使用,轻量级和简单但功能强大的工具,通过单个Web浏览器监视和管理多个远程Linux服务器. 如果你管理着一台 Linux 服务器,那么你可能正在寻找一个可靠的管理工具.为了这 ...
- [转帖]gdb进阶调试技巧
https://www.jianshu.com/p/9bdaa0644dba 整理一下在linux下C/C++用gdb工具debug一些提高效率的操作.基本的gdb操作就不在这里赘述了. 打印各种变量 ...
- [转帖]公钥基础设施(PKI,Public Key Infrastructure)闲谈
https://zhuanlan.zhihu.com/p/384436119 背景 在现实空间中,人类的活动范围和接触人的范围有限,人和人最初的信任是建立在小团体或部落内部.随着全球化进展,人类的活动 ...
- jmaps
#!/bin/bash # # jmaps - creates java /tmp/perf-PID.map symbol maps for all java processes. # # This ...