zoukankan      html  css  js  c++  java
  • 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。

    待续…

  • 相关阅读:
    求连续子数组的最大和
    【LeetCode练习题】Gas Station
    再来看看快速排序
    【LeetCode练习题】First Missing Positive
    【LeetCode练习题】Merge Sorted Array
    Hdu 2089-不要62 数位dp
    Tsinsen A1517. 动态树 树链剖分,线段树,子树操作
    Bzoj 3505: [Cqoi2014]数三角形 数论
    Poj 3695-Rectangles 矩形切割
    Tsinsen A1505. 树(张闻涛) 倍增LCA,可持久化线段树,DFS序
  • 原文地址:https://www.cnblogs.com/xxcanghai/p/5163020.html
Copyright © 2011-2022 走看看