美文网首页互联网科技程序员
JavaScript中的NaN与isNaN

JavaScript中的NaN与isNaN

作者: 秋风_bdfd | 来源:发表于2019-01-16 21:22 被阅读1次

    NaN

    NaN 即 Not a Number ,不是一个数字。 在 JavaScript 中,整数和浮点数都统称为 Number 类型 。除此之外,Number 类型还有一个很特殊的值,即 NaN 。它是 Number 对象上的一个静态属性,可以通过 Number.NaN 来访问 。

    console.log(Number.NaN); //NaN

    在 ECMAScript v1 和其后的版本中,还可以用预定义的全局属性 NaN 代替 Number.NaN 。

    console.log(NaN); //NaN

    在以下两种场景中,可能会产生 NaN 值 。

    表达式计算

    一个表达式中如果有减号 (-)、乘号 (*) 或 除号 (/) 等运算符时,JS 引擎在计算之前,会试图将表达式的每个分项转化为 Number 类型(使用 Number(x) 做转换)。如果转换失败,表达式将返回 NaN 。

    加号 (+) 不会将其两边的变量转化为 Number 类型,这是因为JS表达式的执行顺序是按照运算符的优先级从左到右依次进行的,如果加号 (+) 两边的变量都是 Number 类型时,才会做数字相加运算,如果其中有一个变量是字符串,则会将两边都作为字符串相加。

    5 + 4 + '6' = '96'

    1 + '2' + 3 = '123'

    类型转换

    直接使用 parseIntparseFloat 或 Number 将一个非数字的值转化为数字时,表达式返回 NaN 。

    这里还是要推荐下小编的web前端学习群:867726593,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括 小编自己整理的一份最新的web前端资料和0基础入门教程,欢迎初学和进 阶中的小伙伴。在不忙的时间我会给大家解惑。

    对于 数字+字符 的值,其转化结果会有所不同:

    Number 转换的是整个值,而不是部分值;parseInt 和 parseFloat 只转化第一个无效字符之前的字符串。 另外,一元加操作符也可以实现与 Number 相同的作用。

    因此,当一个字符串不能被 NumberparseInt 或 parseFloat 成功转换时,就返回 NaN,表示该字符串无法被识别为数字类型,这是一个异常状态,并不是一个确切的值。

    isNaN

    isNaN() 是一个全局方法,它的作用是检查一个值是否能被 Number() 成功转换 。 如果能转换成功,就返回 false,否则返回 true 。

    可以看出,isNaN() 没有办法判断某个值本身是否为 NaN 。如果想要知道某个值本身是否为 NaN,可以利用 NaN 不等于自身 这一特性来判断。

    另外,ES6 在 Number 对象上也提供了 isNaN() 方法,和全局方法 isNaN() 不同的是,它用于判断某个值本身是否为 NaN,而不需要进行类型转换。

    相关文章

      网友评论

        本文标题:JavaScript中的NaN与isNaN

        本文链接:https://www.haomeiwen.com/subject/vtuvdqtx.html