JavaScript中的各种小坑汇总
目录
1、Number()将部分非数字类型转换为0
强制转换为数值类型函数:
parseFloat、parseInt
优点:对非数值类型统一返回NaN
缺点:会将一部分符合数值类型的字符串也识别为数值
parseFloat("1")//1
parseFloat("1s")//1,不是想要的 parseFloat(null)//NaN parseFloat(undefined)//NaN parseFloat("")//NaN
Number
优点:对于字符串必须全部符合数值类型才会转换成功
缺点:会将部分非数值类型转换为0
Number("1")//1 Number("1s")//NaN Number(null)//0,不是想要的 Number(undebug)//NaN Number("")//0,不是想要的
其中Number(null)和Number(“”)都会返回0,而不是NaN,从而导致了各种bug。
判断是否是数值类型的解决方案
使用jquery提供的$.isNumeric函数判断。
$.isNumeric("1")//true $.isNumeric("1s")//false $.isNumeric(null)//false $.isNumeric(undefined)//false $.isNumeric("")//false
全部正确,附jquery的$.isNumeric函数源码:
isNumeric: function( obj ) { // parseFloat NaNs numeric-cast false positives (null|true|false|"") // ...but misinterprets leading-number strings, particularly hex literals ("0x...") // subtraction forces infinities to NaN // adding 1 corrects loss of precision from parseFloat (#15100) return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0; },
2、"".split(",")函数会返回长度为1的数组
在说这个问题提之前需要先说下split函数的几种特殊值的情况。
字符串的split函数的特殊值情况
1、参数不传,返回包含原字符串对象,长度为1的数组。
"".split()//[""] "xxcanghai".split()//["xxcanghai"]
2、参数传空字符串,返回将原字符串每个字符分隔的数组
若原字符串为空字符串则返回空数组
"".split("")//[] "xxcanghai".split("")//["x", "x", "c", "a", "n", "g", "h", "a", "i"]
3、原字符串为空字符串,参数不为空时,会返回包含一个空字符串的数组
"".split(",")//[""],错误,应为[] "".split("xxcanghai")//[""],错误,应为[]
可见,原字符串长度为0,且分隔符长度大于0时,会返回一个包含空字符串的数组。
因为这个问题,导致了各种各样的bug。
待续…
如果您认为本文对得起您所阅读他所花的时间,欢迎点击右下角↘ 推荐。您的支持是我继续写作最大的动力,谢谢
作者:沧海月明
出处:http://www.cnblogs.com/xxcanghai/
本文地址:http://www.cnblogs.com/xxcanghai/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
分类:
JavaScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?