答:NaN是一个特殊的数值类型,表示“不是一个数”(Not a Number)。它的数据类型是number。NaN的主要用途是在数学和计算中表示无意义或不可确定的值。

NaN由于具有唯一性和不等于任何值,因此在一些特殊情况下被认为是有用的,其中包括:

  1. 转化非数字值:如果尝试将非数字值转换为number类型,结果为NaN。例如:

    const a = parseInt('hello');
    console.log(a); // NaN
  2. 数学函数中的错误或不合法操作:例如:试图对负数或空值取平方根都会产生NaN。例如:

    const a = Math.sqrt(-1);
    console.log(a); // NaN
  3. 在一些操作后,JavaScript引擎无法返回合理的数值时,也会返回NaN。例如:

    const a = 0/0;
    console.log(a); // NaN

    需要注意的是,在使用NaN时需要格外小心,因为NaN与任何数值进行运算的结果均为NaN,即NaN的存在往往会产生不可预料的结果。因此,在使用NaN时,必须做出特殊的处理,以确保得出正确的结果,并尽可能避免使用NaN,以便保持代码的可读性和正确性。

eg:(1)如果有非数值参与计算,运行结果就是 NaN

   eg:  var str1 = '北京';
        var str2 = '上海';

 这两个变量中存储的数据,都不是数值, 执行结果就是NaN;

(2)有NaN参与, 执行结果也是NaN

eg: a.  var res1 = str1 - str2;
        console.log(res1);
    b.  res2 = 100 - str1;
        console.log(res2);

(3) 如果是 用+ 加号参与运算的,两侧都是数值,执行加法运算:但是有一个是字符串,就执行字符串拼接操作。

   eg: console.log ( '北京' + 100 == '北京' + 100 );实现的是字符串拼接。

   总结:

   1)NaN虽然表示是一个非数字 , 但是一般是算术运算执行的结果, 因此NaN 仍然是 数值类型;

   2) 执行运算时 (非加法运算 )只要有NaN参与,执行结果都是NaN;

   3) 如果是加法运算 , 且有一个是字符串,那么 执行 字符串拼接操作; 都是数值时则执行 加法运算;

   4) NaN 永远 不会等于 NaN  即NaN == NaN  执行结果是 false

因为在JavaScript的规定中, NaN表示的是非数字, 但是这个非数字也是不同的, 因此 NaN 不等于 NaN即 两个NaN永远不可能相等。

例如:a) console.log( NaN == NaN ); //执行结果为false

b) console.log ( '北京' - 100 == '北京' - 100 ); //执行结果为false

因为 比较的b)中不是 '北京'-100 这个表达式, 而是 '北京'-100 的结果,左侧 '北京'-100 结果是 NaN, 右侧 '北京'-100 结果是 NaN 但是 NaN 不等于 NaN 因此最后的执行结果为false。

作者:|健儿|,原文链接: https://segmentfault.com/a/1190000043547856

文章推荐

V8是如何执行JavaScript代码的?

SpringBoot 配置CORS处理前后端分离跨域配置无效问题解析

SpringBoot自定义cron表达式注册定时任务

重复delete 对象指针后的 异常调用栈怪异 解析

ARM 详解

Kotlin 与 JAVA 不同之处

SQL server分页的三种方法

单机Linux下搭建MongoDB副本集-三节点

且看这个Node全栈框架,实现了个Cli终端引擎,可无限扩充命...

vue3 迫不得已我硬着头皮查看了keepalive的源代码,解决了线...

一文通吃:从 ZooKeeper 一致性,Leader选举讲到 ZAB

基于Python的渗透测试信息收集系统的设计和实现