• NaN 的 注意点


    NaN

    好久没有复习过 NaN 了,现在来温故知新!

    NaN

    NaN 表示 Not A Number

    NaN 属性的属性特性:
    writablefalse
    enumerablefalse
    configurablefalse

    NaN 属性的初始值就是 NaN,和 Number.NaN 的值一样。在现代浏览器中(ES5 中), NaN 属性是一个不可配置(non-configurable),不可写(non-writable)的属性。

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

    NaN === NaN;        // false
    Number.NaN === NaN; // false
    isNaN(NaN);         // true
    isNaN(Number.NaN);  // true
    
    • 1
    • 2
    • 3
    • 4

    注意点

    typeof NaN === "number" // true ,虽然 NaN 是“Not a Number”,但是它的类型还是数值类型
    
    NaN === NaN;  // false, NaN 和任何东西都不相等——甚至是它自己本身
    NaN == NaN  // false
    
    // 0 除以 0 会返回NaN —— 但是其他数除以 0 则不会返回NaN
    
    /**
    	如果isNaN函数的参数不是Number类型, isNaN函数会首先尝试将这个参数转换为数值,然后才会对转换后的结果是否是NaN进行判断。因此,对于能被强制转换为有效的非 NaN 数值来说(空字符串和布尔值分别会被强制转换为数值 0 和 1),返回false值也许会让人感觉莫名其妙
    */
    
    isNaN('') === false
    isNaN(true) === false
    
    // isNaN函数其实等同于回答了这样一个问题:被测试的值在被强制转换成数值时会不会返回 IEEE-754​ 中所谓的“不是数值(not a number)”。
    
    Number(undefined) === NaN
    isNaN(undefined); // true
    isNaN({});        // true
    Number(null) === 0
    isNaN(null);      // false
    Number(34.23) === 34.23
    
    parseInt("123ABC") === 123
    Number("123ABC") === NaN
    isNaN("");        // false: 空字符串被转换成 0
    isNaN(" ");       // false: 包含空格的字符串被转换成 0
    undefined +1 			// NaN
    
    
    
    
    isNaN(NaN); // true
    
    isNaN('A String'); // true
    
    isNaN(undefined); // true
    
    isNaN({}); // true
    
    Number.isNaN(NaN); // true
    
    Number.isNaN('A String'); // false
    
    Number.isNaN(undefined); // false
    
    Number.isNaN({}); // false
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48

    NaN并不一定用于表示某些值超出表示范围的情况。将某些不能强制转换为数值的非数值转换为数值的时候,也会得到NaN

    实现 isNaN 函数:

    var isNaN = function(value) {
        var n = Number(value);
        return n !== n;
    };
    
    • 1
    • 2
    • 3
    • 4

    Number.isNaN与isNaN的区别

    isNaN(undefined)    // true
    Number.isNaN(undefined)  //false
    
    • 1
    • 2

    如果要判断一个值是否严格等于NaN,全局的isNaN貌似就无法做到了,因为传进去任何不能转化成数字的值,都会得到true。因为全局的isNaN会把传入的值做类型转换,先转换成数字型,再判断是否==NaN

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

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

    总结:就是 isNaN 会先调用 Number(参数)看能不能转换数字类型,然后再进行判断,但是 Number.isNaN 就不会做任何的隐式转化

  • 相关阅读:
    R语言ggplot2可视化:使用ggpubr包的ggline函数可视化折线图(点线图、line plot)、设置add参数为mean可视化不同水平均值的折线图
    1359:围成面积
    033:跨域,vue端和 Nignx反向代理的配置详细解析
    RFID技术引领汽车零部件加工新时代
    因果推断 之 初介绍 + 案例分析
    prompt learning 术语中文翻译
    《Java8实战》读书笔记11:Java8中新的日期、时间API
    51单片机+SIM800C(GSM模块)实现短信发送功能
    【考研数学】高等数学第五模块 —— 级数(2,幂级数)
    【分布式幂等性】高并发下如何保证接口的幂等性?
  • 原文地址:https://blog.csdn.net/qq_45803050/article/details/127129335