Confusion between isNaN and Number.isNaN in javascript

前端 未结 4 1643
悲哀的现实
悲哀的现实 2020-11-29 08:13

I have a confusion in how NaN works. I have executed isNaN(undefined) it returned true . But if I will use Number.isNaN(undefined) it

4条回答
  •  盖世英雄少女心
    2020-11-29 08:35

    I found that if you want to check if something is numbery (or not), then a combination of Number.isNaN() with either Number.parseInt() or Number.parseFloat() (depending on what you expect) to cover most use cases:

    consider: test a bunch of different input vars against several is number tests:

    r = [NaN, undefined, null, false, true, {}, [], '', ' ', 0, 1, '0', '1']
    .map(function(v){return [
        v, 
        isNaN(v), 
        Number.isNaN(v), 
        Number.isInteger(v),
        Number.parseInt(v, 10), 
        Number.isNaN( Number.parseInt(v, 10)) 
    ];});
    console.table(r);
    // or if console.table() not available:
    r.join('\n', function(v){v.join(',')} );
    

    result:

    NaN      , true , true , false, NaN, true 
    undefined, true , false, false, NaN, true 
    null     , false, false, false, NaN, true 
    false    , false, false, false, NaN, true 
    true     , false, false, false, NaN, true 
    Object   , true , false, false, NaN, true 
    Array(0) , false, false, false, NaN, true 
    ''       , false, false, false, NaN, true 
    ' '      , false, false, false, NaN, true 
    0        , false, false, true , 0  , false
    1        , false, false, true , 1  , false
    '0'      , false, false, false, 0  , false
    '1'      , false, false, false, 1  , false
    

    Note the last column, which is usually what I want in my experience.

提交回复
热议问题