Confusion between isNaN and Number.isNaN in javascript

前端 未结 4 1630
悲哀的现实
悲哀的现实 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:44

    To quote from a ponyfoo article on numbers in ES6:

    Number.isNaN is almost identical to ES5 global isNaN method. Number.isNaN returns whether the provided value equals NaN. This is a very different question from “is this not a number?”.

    So isNaN just checks whether the passed value is not a number or cannot be converted into a Number. Number.isNaN on the other hand only checks if the value is equal to NaN (it uses a different algorithm than === though).

    The String 'ponyfoo' for example is not a number and cannot be converted into a number, but it is not NaN.

    Example:

    Number.isNaN({});
    // <- false, {} is not NaN
    Number.isNaN('ponyfoo')
    // <- false, 'ponyfoo' is not NaN
    Number.isNaN(NaN)
    // <- true, NaN is NaN
    Number.isNaN('pony'/'foo')
    // <- true, 'pony'/'foo' is NaN, NaN is NaN
    
    isNaN({});
    // <- true, {} is not a number
    isNaN('ponyfoo')
    // <- true, 'ponyfoo' is not a number
    isNaN(NaN)
    // <- true, NaN is not a number
    isNaN('pony'/'foo')
    // <- true, 'pony'/'foo' is NaN, NaN is not a number
    

提交回复
热议问题