JavaScript 的 isFinite( ) 和 jQuery 的 $.isNumeric 有区别吗?是什么你?

JavaScript 的 isFinite( ) 和 jQuery 的 $.isNumeric 有区别吗?是什么你?

阅读 2.9k
2 个回答

isFinite(num)检测num是否为有限数字(或者可以被转化为有限数字),就是先对参数进行一个强制类型转换,进行一个num = Number(num),然后再对num进行判断。
jq的isNumeric(str)也是先对参数进行强制类型转换,但是不同的是将其转为string类型,然后将这个string类型,利用parseFloat()将其转为Number类型,实现代码如下:

var isNumeric = function( obj ) {
    return !Array.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0;
};

isNumberic判断的是不是一个数字(两种形式:"1" or 1
具体区别:

console.log(isFinite(true));   // true
console.log(isFinite([1]));    // true
console.log(isNumberic(true)); // false
console.log(isNumberic([1])); // false

https://github.com/RubyLouvre/jsbook/issues/107


    //jquery1.43~1.64
    jQuery.isNaN = function(obj) {
        return obj == null || !rdigit.test(obj) || isNaN(obj);
    }
    //jquery1.7 就是isNaN的取反版
    jQuery.isNumeric = function(obj) {
        return obj != null && rdigit.test(obj) && !isNaN(obj);
    }
    //jquery1.71~1.72
    jQuery.isNumeric = function(obj) {
        return !isNaN(parseFloat(obj)) && isFinite(obj);
    }
    //jquery2.1
    jQuery.isNumeric = function(obj) {
        return obj - parseFloat(obj) >= 0;
    }

这是jquery  搞的isNumeric  
到jquery3,就变得更复杂了

        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;
        },

看一下具体实现
然后一个个慢慢比较吧 具体细微差距...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题