zoukankan      html  css  js  c++  java
  • 【JavaScript】标准内置变量 NaN

    以下内容为学习记录,可以参考 MDN 原文。

    环境

    • node v12.18.1
    • npm 6.14.5
    • vscode 1.46
    • Microsoft Edge 83

    概念

    全局属性 NaN 的值表示不是一个数字(Not-A-Number)。

    NaN 属性的初始值就是 NaN,和 Number.NaN 的值一样。
    在现代浏览器中( ES5 中), NaN 属性是一个不可配置(non-configurable),不可写(non-writable)的属性。
    但在 ES3 中,这个属性的值是可以被更改的,但是也应该避免覆盖。

    编码中很少直接使用到 NaN。通常都是在计算失败时,作为 Math 的某个方法的返回值出现的
    (例如:Math.sqrt(-1))或者尝试将一个字符串解析成数字但失败了的时候(例如:parseInt("blabla"))。

    判断一个值是否是NaN

    NaN 如果通过 == 、 != 、 === 、以及 !== 与其他任何值比较都将不相等,包括与其他 NAN值进行比较。
    必须使用 Number.isNaN() 或 isNaN() 函数。在执行自比较之中:NaN,也只有NaN,比较之中不等于它自己。

    NaN === NaN;        // false
    Number.NaN === NaN; // false
    isNaN(NaN);         // true
    isNaN(Number.NaN);  // true
    
    function valueIsNaN(v) { return v !== v; }
    valueIsNaN(1);          // false
    valueIsNaN(NaN);        // true
    valueIsNaN(Number.NaN); // true
    

    但是,请注意isNaN()和Number.isNaN()之间的区别:
    如果当前值是NaN,或者将其强制转换为数字后将是NaN,则前者将返回true。而后者仅当值当前为NaN时才为true:

    isNaN('hello world');        // true
    Number.isNaN('hello world'); // false
    

    示例

    function sanitise(x) {
      if (isNaN(x)) {
        return NaN;
      }
      return x;
    }
    
    console.log(sanitise('1'));
    // expected output: "1"
    
    console.log(sanitise('NotANumber'));
    // expected output: NaN
    
  • 相关阅读:
    hihocoder #1138 : Islands Travel
    关于c中的inline
    LUOGU P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
    LUOGU P1908 逆序对
    归并排序 (模板)
    tyvj 1864 守卫者的挑战
    loj #10001. 「一本通 1.1 例 2」种树
    bzoj 1026: [SCOI2009]windy数
    BZOJ 4521: [Cqoi2016]手机号码
    LUOGU 3089 后缀排序(模板)
  • 原文地址:https://www.cnblogs.com/jiangbo44/p/13388674.html
Copyright © 2011-2022 走看看