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。
待续…
JavaScript中的各种小坑汇总的更多相关文章
- iOS总结:项目中的各种小坑汇总
一.字符串转JSON 在网络请求时,如果服务端返回的是字符串,那么就需要我们自己封装一个类,将请求下来的字符串转换成json对象,从而存入模型中. 注意: 字符串中如果含有一些特殊转意符(如\n.\t ...
- 一次 react-router 中遇到的小坑
react-router Link 标签不生效的问题 废话不多说, 直接上问题, 排解过程和答案 现象: 发现 使用 Link 标签没有 元素的样式和效果, 也不能进行跳转 代码如下: render( ...
- JAVA开发过程中的各种小坑
1.有时候你在本地跑的ECLIPSE中得到的正确的结果,部署到服务器上使用其他容器,如tomcat或WARS的时候,跑出的结果也许就不一致, 我们程序员会经常抱怨,在我机器上跑的好好的. 在不同的容器 ...
- Javascript中new Date的坑
在一段判断是否过期的js代码中是这么写的: if (new Date() < new Date(2014, 9, 25)) { //... } 后来发现过了9月25日竟然不过期,console. ...
- C语言中重要的小知识汇总
用于整理记录一些C语言下的小知识点: 1. 在C语言中,怎么查看一个数据类型占用了多少个字节大小呢? 可以使用sizeof(int)/sizeof(double)等来查看某数据类型到底用了几个字节: ...
- Symfony4框架中单元测试和接口测试中的一些小坑
前提说明: symfony 版本 4.1.*,使用 composer create-project symfony/website-skeleton 进行安装. 目标:在一个单元测试用例中对当前工 ...
- JavaScript中this的一些坑
我们经常在回调函数里面会遇到一些坑: var obj = { name: 'qiutc', foo: function() { console.log(this); }, foo2: function ...
- python开发中常见的小坑
(1)可变参数类型作为函数参数默认值,函数参数默认值的设置在Python中只会被执行一次,也就是定义该函数的时候. 解决办法,设置为None,然后判断 (2)Python中的变量名解析遵循所谓的LEG ...
- javascript中数组方法小计
一:数组的常用方法: 1:join(); 将数组转为字符串显示.不输入参数,默认以逗号连接:输入参数,则以参数连接. var arr=[1,2,3]; console.log(arr.join()); ...
随机推荐
- 设计模式C#实现(九)——工厂方法模式和简单工厂
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.Factory Method使一个类的实例化延迟到其子类. 构成: 1.Product工厂方法创建的对象的接口 2.Concrete ...
- ASP.NET发布网站遇到的几个问题
环境背景 操作系统:Win7 开发工具:Visual Studio 2013 Framework: Framework 4.0 Issue1: 无法识别的属性“targetFramework” 解决方 ...
- ssis trainning
1. 防止包打开后hang住,可以使用delay validation=false. 2.2008R2 configuration 起作用的优先级? 一是des ign time. 二是运行的时候指定 ...
- USACO section1.1 Broken Necklace
/* ID: vincent63 LANG: C TASK: beads */ #include <stdio.h> #include<stdlib.h> #include&l ...
- OpenStack overview 笔记
Example architecture example architecture 至少需要两个节点启动一个虚拟机或者实例.可选的服务,例如Block storage和Object storage需要 ...
- Ngrok远程桌面及ssh配置
上一篇Ngrok 内网穿透利器 使用教程我们讲到Ngrok的基本使用教程,这篇描述一下Ngrok的远程桌面及ssh配置 Step 1 修改配置文件ngrok.cfg server_addr: &quo ...
- Topcoder SRM 619 DIv2 500 --又是耻辱的一题
这题明明是一个简单的类似约瑟夫环的问题,但是由于细节问题迟迟不能得到正确结果,结果比赛完几分钟才改对..耻辱. 代码: #include <iostream> #include <c ...
- github结合TortoiseGit使用sshkey,无需输入账号和密码
1.github上支持三种方式进行项目的clone https,ssh,subversion https://github.com/用户名/版本库.git ssh的方式 git@github.c ...
- [反编译U3D]Decompile Unity Resources
工具说明 反编译unity project资源文件,包括ios,android,pc等平台资源,仅供学习使用! 以下工具任选其一,未有特殊说明是可以同时提取unity3.x,unity4.x,unit ...
- Params 方法参数
params,ref,out 方法参数 示例 在下面的方法使用中 OpenWindow(params object[] args) 传递的参数args添加了params修饰 public void O ...