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 相关文章推荐
this[] 指的是什么内容 讨论
Mar 24 Javascript
JS操作图片(增,删,改) 例子
Apr 17 Javascript
Javascript Web Slider 焦点图示例源码
Oct 10 Javascript
解决Extjs4中form表单提交后无法进入success函数问题
Nov 26 Javascript
jQuery插件Easyui设置datagrid的pageNumber导致两次请求问题的解决方法
Aug 06 Javascript
AngularJS入门教程之XHR和依赖注入详解
Aug 18 Javascript
深入理解jQuery()方法的构建原理
Dec 05 Javascript
jquery easyui DataGrid简单示例
Jan 23 Javascript
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
Jun 16 Javascript
详解如何快速配置webpack多入口脚手架
Dec 28 Javascript
js中对象与对象创建方法的各种方法
Feb 27 Javascript
js实现移动端轮播图滑动切换
Dec 21 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
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
Zend Framework动作助手Url用法详解
2016/03/05 PHP
PHP读取大文件末尾N行的高效方法推荐
2016/06/03 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
PHP高效获取远程图片尺寸和大小的实现方法
2017/10/20 PHP
php使用fullcalendar日历插件详解
2019/03/06 PHP
ff下JQuery无法监听input的keyup事件的解决方法
2013/12/12 Javascript
window.open打开页面居中显示的示例代码
2013/12/27 Javascript
浏览器窗口大小变化时使用resize事件对框架不起作用的解决方法
2014/05/11 Javascript
JS实现至少包含字母、大小写数字、字符的密码等级的两种方法
2015/02/03 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
JavaScript图像延迟加载库Echo.js
2016/04/05 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
xcode中获取js文件的路径方法(推荐)
2016/11/05 Javascript
JS制作类似选项卡切换的年历
2016/12/03 Javascript
vue按需加载组件webpack require.ensure的方法
2017/12/13 Javascript
浅谈在Vue.js中如何实现时间转换指令
2019/01/06 Javascript
基于Vue全局组件与局部组件的区别说明
2020/08/11 Javascript
python实现端口转发器的方法
2015/03/13 Python
python生成二维码的实例详解
2017/10/29 Python
Python 字典中的所有方法及用法
2020/06/10 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
如何使用 Flask 做一个评论系统
2020/11/27 Python
python 实现的车牌识别项目
2021/01/25 Python
使用html5制作loading图的示例
2014/04/14 HTML / CSS
美的官方商城:Midea
2016/09/14 全球购物
结构和类有什么异同
2012/07/16 面试题
高三毕业生自我鉴定
2013/12/20 职场文书
应用艺术专业个人的自我评价
2014/01/03 职场文书
2014年社区学雷锋活动总结
2014/03/09 职场文书
演讲主持词
2014/03/18 职场文书
教师节祝酒词
2015/08/11 职场文书
处世之道:关于真诚相待的名言推荐
2019/12/02 职场文书
巧用 -webkit-box-reflect 倒影实现各类动效(小结)
2021/04/22 HTML / CSS
游戏《铁拳》动画化!2022年年内播出
2022/03/21 日漫