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 相关文章推荐
日期函数扩展类Ver0.1.1
Sep 07 Javascript
js实现登陆遮罩效果的方法
Jul 28 Javascript
详解Bootstrap创建表单的三种格式(一)
Jan 04 Javascript
JQuery日历插件My97DatePicker日期范围限制
Jan 20 Javascript
javascript深拷贝(deepClone)详解
Aug 24 Javascript
BootStrap fileinput.js文件上传组件实例代码
Feb 20 Javascript
jQuery中的on与bind绑定事件区别实例详解
Feb 28 Javascript
Bootstrap table学习笔记(2) 前后端分页模糊查询
May 18 Javascript
引入JavaScript时alert弹出框显示中文乱码问题
Sep 16 Javascript
Javascript 编码约定(编码规范)
Mar 11 Javascript
ionic2.0双击返回键退出应用
Sep 17 Javascript
Vue使用富文本编辑器Vue-Quill-Editor(含图片自定义上传服务、清除复制粘贴样式等)
May 15 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
PHP5在Apache下的两种模式的安装
2006/09/05 PHP
PHP调用三种数据库的方法(1)
2006/10/09 PHP
福利彩票幸运号码自动生成器
2006/10/09 PHP
php字符串截取的简单方法
2013/07/04 PHP
PHP用continue跳过本次循环中剩余代码的注意点
2017/06/27 PHP
PHP机器学习库php-ml的简单测试和使用方法
2017/07/14 PHP
Extjs学习笔记之三 extjs form更多的表单项
2010/01/07 Javascript
仿猪八戒网左下角的文字滚动效果
2011/10/28 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
Eclipse去除js(JavaScript)验证错误
2014/02/11 Javascript
js事件绑定快捷键以ctrl+k为例
2014/09/30 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
微信页面倒计时代码(解决safari不兼容date的问题)
2016/12/13 Javascript
jquery表单插件form使用方法详解
2017/01/20 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
2018/06/28 Javascript
详解关于Vue2.0路由开启keep-alive时需要注意的地方
2018/09/18 Javascript
解决layer图标icon不加载的问题
2019/09/04 Javascript
Python中的Numpy入门教程
2014/04/26 Python
python搭建服务器实现两个Android客户端间收发消息
2018/04/12 Python
解决python3爬虫无法显示中文的问题
2018/04/12 Python
详解tensorflow载入数据的三种方式
2018/04/24 Python
django Serializer序列化使用方法详解
2018/10/16 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
python 画3维轨迹图并进行比较的实例
2019/12/06 Python
Mio Skincare中文官网:肌肤和身体护理
2016/10/26 全球购物
图库照片、免版税图片、矢量艺术、视频片段:Depositphotos
2019/08/02 全球购物
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
一些Solaris面试题
2015/12/22 面试题
小学教师事迹材料
2014/01/13 职场文书
《哪吒闹海》教学反思
2014/02/28 职场文书
青奥会口号
2014/06/12 职场文书
高中军训的心得体会
2014/09/01 职场文书
小学优秀教师事迹材料
2014/12/16 职场文书
拖欠货款起诉状
2015/05/20 职场文书
Navicat for MySQL的使用教程详解
2021/05/27 MySQL