JavaScript字符串转数字的5种方法及遇到的坑


Posted in Javascript onJuly 16, 2018

String转换为Number有很多种方式,我可以想到的有5种!

parseInt(num); // 默认方式 (没有基数)
parseInt(num, 10); // 传入基数 (十位数)
parseFloat(num) // 浮点数
Number(num); // Number 构造器
~~num //按位非
num / 1 // 除一个数
num * 1 // 乘一个数
num - 0 // 减去0
+num // 一元运算符 "+"

选择哪一种呢?什么时候选择它?为什么选择这种它?我们逐一进行分析,并解析每种方式的常见陷阱。

parseInt

根据JsPerf.com的基准测试,大多数浏览器对parseInt的响应最佳。虽然它是最快的方式,但使用preseInt会碰到一些常见陷阱:

parseInt('08') // returns 0 部分老浏览器.
parseInt('44.jpg') // returns 44

parseInt: 没有传入基数时,默认是传入的基数为10 parseInt(num, 10),如果你不知道num属性的类型,不要使用parseInt进行字符串转数字。

parseFloat

如果你不解析16进制数,这是一个非常好的选择。例如:

parseInt(-0xFF) // returns -255
parseInt("-0xFF") // returns -255
parseFloat(-0xFF) // returns -255
parseFloat("-0xFF") // returns 0

注意:字符串中的负十六进制数字是一个特殊情况,如果你用parseFloat解析,结果是不正确的。为了避免程序出现NaN的情况,应该检查转化后的值。

parseFloat('44.jpg') // return 44

parseFloat: 转换十六进制数时要小心,如果你不知道要转换对象的类型,不要使用parseFloat。

按位非

可以把字符串转换成整数,但他不是浮点数。如果是一个字符串转换,它将返回0;

~~1.23 // returns 1
~~"1.23" // returns 1
~~"23" // returns 23
~~"Hello world" // returns 0

这是什么原理?通过翻转)每个位,也称为数字的A1补码。你可以使用它,但注意只能用来存储整数。所以通常情况不要用它,除非你能确定这个数是在32位整数之间的值(因为调用的ToInt32的规范)。

按位非:用它确保输入中没有字符,仅用于整数。

Number

Number与以上提及的转换方式一样存在这样的问题,解析时试图找出你给他的数字:

Number("023") // returns 23
Number(023) // returns 19

注意:023实际上是一个八进制数,无论你怎么做,都是返回19;对于没有单引号或双引号的十六进制数一样。

Number也是JsPerf中最慢的之一。

Number:几乎不用它。

一元云算符

"1.23" * 1 // returns 1.23
"0xFF" - 0 // returns 255
"0xFF.jpg" / 1 // returns NaN
+"023" // returns 23

一元运算符与其它的解析方式不同,如果是一个NaN值,那么返回的也是NaN 。这是我最喜欢的数值转换方式,因为我认为任何带有字符的对象都不应该被视为0或者根据他有多少位来“猜”。我基本使用 + 操作符,因为这个方式不容易混淆。虽然 -0 的用法也很好,但它并没有很好的表达转换为数字的本意。

字符串转换为数字的方式总结

负十六进制数字符串转换为数字时。应首先将任何其转换为String(例如通过 + "" ),然后使用一元运算符或带基数的parseInt解析为数字。但是结果不是NaN的数值时,使用parseFloat更为合适。

总结

以上所述是小编给大家介绍的JavaScript字符串转数字的5种方法及遇到的坑,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
关于jquery.validate1.9.0前台验证的使用介绍
Apr 26 Javascript
当jQuery1.7遇上focus方法的问题
Jan 26 Javascript
javascript事件模型实例分析
Jan 30 Javascript
在JavaScript中操作数组之map()方法的使用
Jun 09 Javascript
微信小程序使用第三方库Underscore.js步骤详解
Sep 27 Javascript
在bootstrap中实现轮播图实例代码
Jun 11 Javascript
Three.js基础学习之场景对象
Sep 27 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
Dec 20 Javascript
解决webpack+Vue引入iView找不到字体文件的问题
Sep 28 Javascript
浅谈vue限制文本框输入数字的正确姿势
Sep 02 Javascript
Vue实现星级评价效果实例详解
Dec 30 Javascript
简单聊聊Vue中的计算属性和属性侦听
Oct 05 Vue.js
Angular-UI Bootstrap组件实现警报功能
Jul 16 #Javascript
JS在if中的强制类型转换方式
Jul 15 #Javascript
微信小程序form表单组件示例代码
Jul 15 #Javascript
微信小程序仿朋友圈发布动态功能
Jul 15 #Javascript
Bootstrap Table中的多选框删除功能
Jul 15 #Javascript
详解JavaScript 中 if / if...else...替换方式
Jul 15 #Javascript
简述JS控制台的使用
Jul 15 #Javascript
You might like
PHP的fsockopen、pfsockopen函数被主机商禁用的解决办法
2014/07/08 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
php 使用curl模拟登录人人(校内)网的简单实例
2016/06/06 PHP
PHP 出现 http500 错误的解决方法
2021/03/09 PHP
对联广告js flash激活
2006/10/19 Javascript
javascript中的parseInt和parseFloat区别
2013/07/12 Javascript
jquery获取URL中参数解决中文乱码问题的两种方法
2013/12/18 Javascript
JavaScript获取flash对象与网上的有所不同
2014/04/21 Javascript
window resize和scroll事件的基本优化思路
2014/04/29 Javascript
jQuery插件slider实现拖动滑块选取价格范围
2015/04/30 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
Vue利用路由钩子token过期后跳转到登录页的实例
2017/10/26 Javascript
详解webpack之scss和postcss-loader的配置
2018/01/09 Javascript
JS实现的文件拖拽上传功能示例
2018/05/21 Javascript
vue中element-ui表格缩略图悬浮放大功能的实例代码
2018/06/26 Javascript
详解Koa中更方便简单发送响应的方式
2018/07/20 Javascript
JavaScript面向对象程序设计创建对象的方法分析
2018/08/13 Javascript
javascript使用链接跨域下载图片
2019/11/01 Javascript
解决node终端下运行js文件不支持ES6语法
2020/04/04 Javascript
Taro UI框架开发小程序实现左滑喜欢右滑不喜欢效果的示例代码
2020/05/18 Javascript
[54:18]DOTA2-DPC中国联赛 正赛 PSG.LGD vs LBZS BO3 第一场 1月22日
2021/03/11 DOTA
由浅入深讲解python中的yield与generator
2017/04/05 Python
tornado 多进程模式解析
2018/01/15 Python
Pandas 数据框增、删、改、查、去重、抽样基本操作方法
2018/04/12 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
2019/05/13 Python
python判断自身是否正在运行的方法
2019/08/08 Python
如何一键升级Python所有包
2020/11/05 Python
大学生优秀的自我评价分享
2013/10/22 职场文书
产假请假条
2014/04/10 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
驾驶员安全责任协议书
2016/03/22 职场文书
MySQL系列之二 多实例配置
2021/07/02 MySQL
DIV CSS实现网页背景半透明效果
2021/12/06 HTML / CSS
python中pymysql包操作数据库方法
2022/04/19 Python
Shell中的单中括号和双中括号的用法详解
2022/12/24 Servers