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 相关文章推荐
表单元素事件 (Form Element Events)
Jul 17 Javascript
输入框的字数时时统计—关于 onpropertychange 和 oninput 使用
Oct 21 Javascript
基于jQuery的公告无限循环滚动实现代码
May 11 Javascript
使用JS 清空File控件的路径值
Jul 08 Javascript
JS根据年月获得当月天数的实现代码
Jul 03 Javascript
jQuery常用且重要方法汇总
Jul 13 Javascript
jQuery ajax分页插件实例代码
Jan 27 Javascript
js中的关联数组与普通数组详解
Jul 27 Javascript
jQuery在header中设置请求信息的方法
Mar 06 Javascript
微信小程序 JS动态修改样式的实现方法
Dec 16 Javascript
使用layer模态框给新页面传值的方法
Sep 27 Javascript
如何通过JS实现日历简单算法
Oct 14 Javascript
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
留言板翻页的实现详解
2006/10/09 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
2011/04/12 PHP
Zend Framework分页类用法详解
2016/03/22 PHP
header与缓冲区之间的深层次分析
2016/07/30 PHP
jQuery textarea的长度进行验证
2009/05/06 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
jquery text(),val(),html()方法区别总结
2013/11/04 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
使用Node.js实现一个简单的FastCGI服务器实例
2014/06/09 Javascript
javascript中数组方法汇总
2015/07/07 Javascript
js基于面向对象实现网页TAB选项卡菜单效果代码
2015/09/09 Javascript
JavaScript中的原始值和复杂值
2016/01/07 Javascript
理解Javascript文件动态加载
2016/01/29 Javascript
js对象浅拷贝和深拷贝详解
2016/09/05 Javascript
vue2.0结合Element实现select动态控制input禁用实例
2017/05/12 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
浅谈Vue2.0父子组件间事件派发机制
2018/01/08 Javascript
微信小程序实现MUI数字输入框效果
2018/01/31 Javascript
bootstrap与pagehelper实现分页效果
2018/12/29 Javascript
浅入深出Vue之自动化路由
2019/08/06 Javascript
layui写后台表格思路和赋值用法详解
2019/11/14 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
Python ORM框架SQLAlchemy学习笔记之数据查询实例
2014/06/10 Python
Python greenlet实现原理和使用示例
2014/09/24 Python
python多进程使用及线程池的使用方法代码详解
2018/10/24 Python
python动态文本进度条的实例代码
2020/01/22 Python
TensorBoard 计算图的查看方式
2020/02/15 Python
加拿大品牌鞋包连锁店:Little Burgundy
2021/02/28 全球购物
中英双版中文教师求职信
2013/10/27 职场文书
大学生党员学习焦裕禄精神思想汇报
2014/09/10 职场文书
大学生学生会工作总结2015
2015/05/26 职场文书
谁动了我的奶酪读书笔记
2015/06/30 职场文书
Java字符缓冲流BufferedWriter
2022/04/09 Java/Android
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技