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 相关文章推荐
DWR Ext 加载数据
Mar 22 Javascript
写入cookie的JavaScript代码库 cookieLibrary.js
Oct 24 Javascript
javascript encodeURI和encodeURIComponent的比较
Apr 03 Javascript
JavaScript 保存数组到Cookie的代码
Apr 14 Javascript
jQuery基础框架浅入剖析
Dec 27 Javascript
中文输入法不触发onkeyup事件的解决办法
Jul 09 Javascript
关于在Servelet中如何获取当前时间的操作方法
Jun 28 Javascript
JQuery 封装 Ajax 常用方法(推荐)
May 21 jQuery
JS实现仿UC浏览器前进后退效果的实例代码
Jul 17 Javascript
vue iview组件表格 render函数的使用方法详解
Mar 15 Javascript
使用p5.js实现动态GIF图片临摹重现
Oct 23 Javascript
Jquery ajax书写方法代码实例解析
Jun 12 jQuery
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.ini中添加extension=php_mysqli.dll指令的说明
2007/06/14 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
2011/05/25 PHP
php正则表达式基本知识与应用详解【经典教程】
2017/04/17 PHP
表单内同名元素的控制
2006/11/22 Javascript
javascript分页代码实例分享(js分页)
2013/12/13 Javascript
js字符串完全替换函数分享
2014/12/03 Javascript
jQuery前端开发35个小技巧
2016/05/24 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
详解JS: reduce方法实现 webpack多文件入口
2017/02/14 Javascript
AngularJS 防止页面闪烁的方法
2017/03/09 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
jQuery Ajax前后端使用JSON进行交互示例
2017/03/17 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
面包屑导航详解
2017/12/07 Javascript
详解Angular5 路由传参的3种方法
2018/04/28 Javascript
如何区分vue中的v-show 与 v-if
2020/09/08 Javascript
[43:32]2014 DOTA2华西杯精英邀请赛 5 25 LGD VS NewBee第一场
2014/05/26 DOTA
[04:03][TI9趣味短片] 小鸽子茶话会
2019/08/20 DOTA
用Python代码来绘制彭罗斯点阵的教程
2015/04/03 Python
python和bash统计CPU利用率的方法
2015/07/10 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
2018/04/27 Python
PyQt5 加载图片和文本文件的实例
2019/06/14 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
HTML5+WebSocket实现多文件同时上传的实例
2016/12/29 HTML / CSS
国际象棋商店:The Chess Store
2018/07/09 全球购物
为娇小女性量身打造:Petite Studio
2018/11/01 全球购物
Glamest意大利:女性在线奢侈品零售店
2019/04/28 全球购物
化工专业推荐信范文
2013/11/28 职场文书
英文演讲稿开场白
2014/08/25 职场文书
政工例会汇报材料
2014/08/26 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
电气工程师岗位职责
2015/02/12 职场文书
2015年暑期社会实践方案
2015/07/14 职场文书
应用最多的公文《通知》如何写?
2019/04/02 职场文书