• JS中的NAN


    一、NAN

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

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

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

    二、NAN的产生

    表达式计算

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

    100 - '2a'; // NaN
    '100'/ '20a'; // NaN
    '20a'* 5 ; // NaN
    undefined - 1; // NaN, Number(undefined) == NaN
    [] * 20 ; // 0, Number([]) == 0
    null- 5; // -5, Number(null) == 0

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

    类型转换

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

    'abc'- 3   // NaN
    parseInt('abc')  // NaN
    parseFloat('abc') // NaN
    Number('abc')    // NaN
    Number('123abc'); // NaN
    parseInt('123abc'); // 123
    parseInt('123abc45'); // 123
    parseFloat('123.45abc');// 123.45

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

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

    三、isNaN

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

    isNaN(NaN)    // true 不能转换
    isNaN('123')   // false 能转换
    isNaN('abc')    // true 不能转换
    isNaN('123ab')   // true 不能转换
    isNaN('123.45abc') // true 不能转换

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

    Number.isNaN('123'); // false 本身不是NaN
    Number.isNaN('abc'); // false 本身不是NaN
    Number.isNaN(NaN); // true 本身是NaN

    参考资料:

    https://www.cnblogs.com/onepixel/p/5281796.html

  • 相关阅读:
    liferay常用api总结
    liferay增删改简单小练习
    MD5加密
    日期的工具类
    java生成随机六位数的验证码&随机生成十位数ValidCode码,用于邮件的验证&检查是不是符合为合法的中国的手机号码
    MyBaties
    网页的外观---CSS层叠样式表---03
    还在买鲜花送女神?手把手教你搭建3D立体相册网站,包女神稀饭
    Vue入门——常见指令及其详细代码示例
    什么是可串行化MVCC
  • 原文地址:https://www.cnblogs.com/fmyao/p/12560182.html
Copyright © 2020-2023  润新知