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 相关文章推荐
javascript Select标记中options操作方法集合
Oct 22 Javascript
formValidator3.3的ajaxValidator一些异常分析
Jul 12 Javascript
原生JavaScript编写canvas版的连连看游戏
May 29 Javascript
javascript正则表达式之分组概念与用法实例
Jun 16 Javascript
微信小程序实战之运维小项目
Jan 17 Javascript
angular2 ng build部署后base文件路径问题详细解答
Jul 15 Javascript
微信小程序swiper组件用法实例分析【附源码下载】
Dec 07 Javascript
vue数据控制视图源码解析
Mar 28 Javascript
浅谈JS和jQuery的区别
Mar 27 jQuery
layui默认选中table的CheckBox复选框方法
Sep 19 Javascript
浅析vue中的provide / inject 有什么用处
Nov 10 Javascript
解决Vue @submit 提交后不刷新页面问题
Jul 18 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
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
PHP的serialize序列化数据以及JSON格式化数据分析
2015/10/10 PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
2016/01/27 PHP
PHP使用GD库输出汉字的方法【测试可用】
2016/11/10 PHP
JS 文件本身编码转换 图文教程
2009/10/12 Javascript
JavaScript Distilled 基础知识与函数
2010/04/07 Javascript
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
基于JavaScript代码实现随机漂浮图片广告
2016/01/05 Javascript
JQuery 的跨域方法推荐_可跨任何网站
2016/05/18 Javascript
JS添加或修改控件的样式(Class)实现方法
2016/10/15 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
深入浅析AngularJS中的一次性数据绑定 (bindonce)
2017/05/11 Javascript
Redux实现组合计数器的示例代码
2018/07/04 Javascript
Vue登录注册并保持登录状态的方法
2018/08/17 Javascript
微信小程序修改checkbox的样式代码实例
2020/01/21 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
Vue 禁用浏览器的前进后退操作
2020/09/04 Javascript
Flask 让jsonify返回的json串支持中文显示的方法
2018/03/26 Python
Python装饰器基础概念与用法详解
2018/12/22 Python
python 已知平行四边形三个点,求第四个点的案例
2020/04/12 Python
matplotlib 曲线图 和 折线图 plt.plot()实例
2020/04/17 Python
美国在线和移动免费会员制批发零售商:Boxed(移动端的Costco)
2020/01/02 全球购物
自荐信怎么写好
2013/11/11 职场文书
八年级英语教学反思
2014/01/09 职场文书
高二英语教学反思
2014/01/19 职场文书
高三生物教学反思
2014/01/25 职场文书
总经理岗位职责范本
2014/02/02 职场文书
标准毕业生自荐信
2014/06/24 职场文书
员工三分钟演讲稿
2014/08/19 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
挂职锻炼个人总结
2015/03/05 职场文书
党纪处分决定书
2015/06/24 职场文书
军事理论课感想
2015/08/11 职场文书
python调用ffmpeg命令行工具便捷操作视频示例实现过程
2021/11/01 Python
tomcat正常启动但网页却无法访问的几种解决方法
2022/05/06 Servers