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. Python基本数据结构-集合-创建/与其他类型比较

  2. Node创建TCP聊天

    //创建新的tcp服务器var net = require('net');var chatServer = net.createServer()chatServer.on('connection',f ...

  3. Garbage Collectors – Serial vs. Parallel vs. CMS vs. G1 (and what’s new in Java 8)

    转自:http://blog.takipi.com/garbage-collectors-serial-vs-parallel-vs-cms-vs-the-g1-and-whats-new-in-ja ...

  4. 【PHP】$_POST, $HTTP_RAW_POST_DATA, and php://input

    1.HTML <form> enctype Attribute application/x-www-form-urlencoded  传送之前所有的字符都会被encoded,(spaces ...

  5. Linux系统之用户、群组和权限

    一.用户管理 创建用户时,系统为用户分配一个唯一的编号UID,同时为用户创建一个同名的组,并为组分配一个编号GID,并把该用户加入该组中. 系统规定: uid: 0       特权用户      u ...

  6. 迅为4412开发板支持AVIN视频输入/AV监控摄像头输入模块

    AVIN模块(iTOP-4412开发板专用) 产品介绍:视频输入/AV监控摄像头输入模块: 该模块及配套的软件为开发视频采集.监控.车载后视等产品提供了很好的参考. iTOP-4412 开发平台 开发 ...

  7. ArcGIS Engine 中 Geometric Network 显示流向代码

    原文地址:http://hi.baidu.com/steeeeps/item/165fbc15475e94741009b5b3 非常感谢作者. 以前学习几何网络时,对效用网络流向进行了总结,原理与效果 ...

  8. js的nextSibling,属性兼容IE和FF等浏览器

    Firefox中 空白字符,比如回车,空格等也算作一个Node 就是firstChild,nextsbiling这两个.下面给出函数吧.还是代码比较说明问题代码都是网上来的.不过要注意的是,getNe ...

  9. extjs ajax请求与struts2进行交互

    sencha extjs 5 增加一个struts2的配置,这样可以在设置好前台布局之后,与后台交互获取数据显示.现在有一个问题是struts2对于url的跳转action支 持比较良好,但是对于像E ...

  10. 浅析CSS——元素重叠及position定位的z-index顺序

    多次在项目中遇到html页面元素的非期待重叠错误,多数还是position定位情况下z-index的问题.其实每次解决类似问题思路大致都是一样的,说到底还是对z-index的理解比较模糊,可以解决问题 ...