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中的各种小坑汇总的更多相关文章

  1. iOS总结:项目中的各种小坑汇总

    一.字符串转JSON 在网络请求时,如果服务端返回的是字符串,那么就需要我们自己封装一个类,将请求下来的字符串转换成json对象,从而存入模型中. 注意: 字符串中如果含有一些特殊转意符(如\n.\t ...

  2. 一次 react-router 中遇到的小坑

    react-router Link 标签不生效的问题 废话不多说, 直接上问题, 排解过程和答案 现象: 发现 使用 Link 标签没有 元素的样式和效果, 也不能进行跳转 代码如下: render( ...

  3. JAVA开发过程中的各种小坑

    1.有时候你在本地跑的ECLIPSE中得到的正确的结果,部署到服务器上使用其他容器,如tomcat或WARS的时候,跑出的结果也许就不一致, 我们程序员会经常抱怨,在我机器上跑的好好的. 在不同的容器 ...

  4. Javascript中new Date的坑

    在一段判断是否过期的js代码中是这么写的: if (new Date() < new Date(2014, 9, 25)) { //... } 后来发现过了9月25日竟然不过期,console. ...

  5. C语言中重要的小知识汇总

    用于整理记录一些C语言下的小知识点: 1. 在C语言中,怎么查看一个数据类型占用了多少个字节大小呢? 可以使用sizeof(int)/sizeof(double)等来查看某数据类型到底用了几个字节: ...

  6. Symfony4框架中单元测试和接口测试中的一些小坑

    前提说明: symfony 版本 4.1.*,使用  composer create-project symfony/website-skeleton  进行安装. 目标:在一个单元测试用例中对当前工 ...

  7. JavaScript中this的一些坑

    我们经常在回调函数里面会遇到一些坑: var obj = { name: 'qiutc', foo: function() { console.log(this); }, foo2: function ...

  8. python开发中常见的小坑

    (1)可变参数类型作为函数参数默认值,函数参数默认值的设置在Python中只会被执行一次,也就是定义该函数的时候. 解决办法,设置为None,然后判断 (2)Python中的变量名解析遵循所谓的LEG ...

  9. javascript中数组方法小计

    一:数组的常用方法: 1:join(); 将数组转为字符串显示.不输入参数,默认以逗号连接:输入参数,则以参数连接. var arr=[1,2,3]; console.log(arr.join()); ...

随机推荐

  1. DataGridView单元格内容自动匹配下拉显示

    页面显示数据使用的控件是ComponentFactory.Krypton.Toolkit中的KryptonDataGridView控件.在指定“商品”单元格中需要根据用户输入内容自动匹配数据库中商品信 ...

  2. 机器学习六--K-means聚类算法

    机器学习六--K-means聚类算法 想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别 ...

  3. jquery eq 用法

    <html> <head> <script src='jquery.min.js'></script> <script type="te ...

  4. Kali Linux 网络扫描秘籍 翻译完成!

    Kali Linux 网络扫描秘籍 翻译完成! 原书:Kali Linux Network Scanning Cookbook 译者:飞龙 在线阅读 PDF格式 EPUB格式 MOBI格式 代码仓库 ...

  5. folly

    一.简介 Folly是,Facebook于2012年6月初开源的一个基于C++11的C++组件库,提供了类似Boost库和std库的功能,包括散列.字符串.向量.内存分配.位处理等,以满足大规模高性能 ...

  6. Count and Say

    Count and Say https://leetcode.com/problems/count-and-say/ The count-and-say sequence is the sequenc ...

  7. STL的erase()陷阱-迭代器失效总结

    下面材料整理自Internet&著作. STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque):另一类是以不连续的节点形式存储的容器(如:list.s ...

  8. git的使用(二)

    1.几个概念 (1)工作区指当前编辑代码的地方,是.git仓库所在的文件夹. (2)暂存区是一个概念,并不存在这个区. (3)仓库是.git文件夹,是运行git init命令时自动创建的,默认是隐藏的 ...

  9. [转载]两个半小时学会Perl

    Learn Perl in about 2 hours 30 minutes By Sam Hughes Perl is a dynamic, dynamically-typed, high-leve ...

  10. POJ 2464 Brownie Points II --树状数组

    题意: 有点迷.有一些点,Stan先选择某个点,经过这个点画一条竖线,Ollie选择一个经过这条直接的点画一条横线.Stan选这两条直线分成的左下和右上部分的点,Ollie选左上和右下部分的点.Sta ...