JS数值类型中特殊数值NaN(Not-a-Number)理解和应用场景

NaN 的含义

在 JavaScript 中,NaN 是一种特殊的数值类型,表示 “Not-a-Number”。它通常用于标识数学运算或类型转换的结果无法产生有效数值的情况。

特性
  1. 类型为数值

    console.log(typeof NaN); // "number"
    

    尽管 NaN 表示 “不是一个数”,它仍然被视为 JavaScript 中的数值类型。

  2. 不等于任何值,包括自身

    console.log(NaN === NaN); // false
    console.log(NaN == NaN);  // false
    
  3. 全局对象NaN 是全局对象的属性,可以直接使用。

  4. 无法比较:通常需要使用 isNaN()Number.isNaN() 来检测。


应用场景

1. 检测无效的数学运算

某些数学操作无法返回有效的数值时,会生成 NaN,例如:

console.log(0 / 0);         // NaN
console.log(Math.sqrt(-1)); // NaN
console.log("abc" - 1);     // NaN
2. 检测无效的类型转换

当非数值字符串尝试转换为数字时,会返回 NaN

console.log(Number("Hello"));  // NaN
console.log(parseInt("abc"));  // NaN
3. 使用 isNaN() 检测非数值

isNaN() 可用于检测值是否为 NaN,但其对非数值的处理较宽松:

console.log(isNaN(NaN));           // true
console.log(isNaN("Hello"));       // true (隐式转换)
console.log(isNaN(undefined));     // true
console.log(isNaN("123"));         // false
4. 使用 Number.isNaN() 检测严格的 NaN

Number.isNaN() 更严格,仅在值为 NaN 时返回 true

console.log(Number.isNaN(NaN));      // true
console.log(Number.isNaN("Hello")); // false
console.log(Number.isNaN(undefined));// false
console.log(Number.isNaN("123"));    // false

代码示例

示例 1: 验证用户输入是否为数值
function validateInput(input) {const num = Number(input);if (Number.isNaN(num)) {console.log("输入不是有效的数字");} else {console.log("输入是有效数字,值为:", num);}
}validateInput("42");    // 输出: 输入是有效数字,值为: 42
validateInput("abc");   // 输出: 输入不是有效的数字
validateInput("");      // 输出: 输入是有效数字,值为: 0
示例 2: 检测无效的数学运算
function divide(a, b) {if (b === 0) {console.log("除数不能为零");return NaN;}return a / b;
}const result = divide(10, 0);
if (Number.isNaN(result)) {console.log("结果是 NaN,无法计算");
}
示例 3: 数据清洗

在数据处理中,可以用 NaN 来标识无效数据:

const data = ["42", "abc", "56", null, "100"];const cleanedData = data.map(item => {return isNaN(item ) ? null : item ;
});console.log(cleanedData); 
// 输出: [42, null, 56, null, 100]

总结

  • NaN 是 JavaScript 数值类型中的一个特殊值,用于表示无法计算或无效的数值。
  • 它在异常处理、输入验证、数据清洗等场景中非常有用。
  • 要正确检测 NaN,建议使用 Number.isNaN(),而不是简单地使用 isNaN()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/64350.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虚幻引擎结构之UWorld

Uworld -> Ulevel ->Actors -> AActor 在虚幻引擎中,UWorld 类扮演着至关重要的角色,它就像是游戏世界的总指挥。作为游戏世界的核心容器,UWorld 包含了构成游戏体验的众多元素,从游戏实体到关卡设计,再到物…

2024第一届Solar杯应急响应挑战赛

日志流量 日志流量-1 直接放到D盾分析 解码 flag{A7b4_X9zK_2v8N_wL5q4} 日志流量-2 哥斯拉流量 工具解一下 flag{sA4hP_89dFh_x09tY_lL4SI4} 日志流量-3 tcp流6复制data流 解码 改pdf flag{dD7g_jk90_jnVm_aPkcs} 内存取证 内存取证-1 vol.py -f 123.raw --profileWin…

HarmonyOS Next 实现登录注册页面(ARKTS) 并使用Springboot作为后端提供接口

1. HarmonyOS next ArkTS ArkTS围绕应用开发在 TypeScript (简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集 ArkTS在TS的基础上扩展了struct和很多的装饰器以达到描述UI和状态管理的目的 以下代码是一个基于…

Spring Boot教程之四十:使用 Jasypt 加密 Spring Boot 项目中的密码

如何使用 Jasypt 加密 Spring Boot 项目中的密码 在本文中,我们将学习如何加密 Spring Boot 应用程序配置文件(如 application.properties 或 application.yml)中的数据。在这些文件中,我们可以加密用户名、密码等。 您经常会遇到…

七、队列————相关概念详解

队列————相关概念详解 前言一、队列1.1 队列是什么?1.2 队列的类比 二、队列的常用操作三、队列的实现3.1 基于数组实现队列3.1.1 基于环形数组实现的队列3.1.2 基于动态数组实现的队列 3.2 基于链表实现队列 四、队列的典型应用总结 前言 本篇文章,我们一起来…

基于 Ragflow 搭建知识库-初步实践

基于 Ragflow 搭建知识库-初步实践 一、简介 Ragflow 是一个强大的工具,可用于构建知识库,实现高效的知识检索和查询功能。本文介绍如何利用 Ragflow 搭建知识库,包括环境准备、安装步骤、配置过程以及基本使用方法。 二、环境准备 硬件要…

Pandas03

Pandas01 Pandas02 文章目录 内容回顾1 排序和统计函数2 缺失值处理2.1 认识缺失值2.2 缺失值处理- 删除2.3 缺失值处理- 填充非时序数据时序数据 3 Pandas数据类型3.1 数值类型和字符串类型之间的转换3.2 日期时间类型3.3 日期时间索引 4 分组聚合4.1 分组聚合的API使用4.2 分…

springboot整合log4j2日志框架1

一 log4j基本知识 1.1 log4j的日志级别 Log4j定义了8个级别的log(除去OFF和ALL,可以说分为6个级别),优先级从低到高依次为:All,trace,debug,info,warn,err…

Spring源码_05_IOC容器启动细节

前面几章,大致讲了Spring的IOC容器的大致过程和原理,以及重要的容器和beanFactory的继承关系,为后续这些细节挖掘提供一点理解基础。掌握总体脉络是必要的,接下来的每一章都是从总体脉络中, 去研究之前没看的一些重要…

WPF使用OpenCvSharp4

WPF使用OpenCvSharp4 创建项目安装OpenCvSharp4 创建项目 安装OpenCvSharp4 在解决方案资源管理器中,右键单击项目名称,选择“管理 NuGet 包”。搜索并安装以下包: OpenCvSharp4OpenCvSharp4.ExtensionsOpenCvSharp4.runtime.winSystem.Man…

TCP-UDP调试工具推荐:Socket通信测试教程(附详细图解)

前言 在网络编程与应用开发中,调试始终是一项不可忽视的重要环节。尤其是在涉及TCP/IP、UDP等底层网络通信协议时,如何确保数据能够准确无误地在不同节点间传输,是许多开发者关注的核心问题。 调试的难点不仅在于定位连接建立、数据流控制及…

【新方法】通过清华镜像源加速 PyTorch GPU 2.5安装及 CUDA 版本选择指南

下面详细介绍所提到的两条命令,它们的作用及如何在你的 Python 环境中加速 PyTorch 等库的安装。 1. 设置清华镜像源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple这条命令的作用是将 pip (Python 的包管理工具&#xf…

【数据结构】单链表的使用

单链表的使用 1、基本概念2、链表的分类3、链表的基本操作a、单链表节点设计b、单链表初始化c、单链表增删节点**节点头插:****节点尾插:****新节点插入指定节点后:**节点删除: d、单链表修改节点e、单链表遍历,并打印…

虚幻引擎是什么?

Unreal Engine,是一款由Epic Games开发的游戏引擎。该引擎主要是为了开发第一人称射击游戏而设计,但现在已经被成功地应用于开发模拟游戏、恐怖游戏、角色扮演游戏等多种不同类型的游戏。虚幻引擎除了被用于开发游戏,现在也用于电影的虚拟制片…

Linux(Centos 7.6)yum源配置

yum是rpm包的管理工具,可以自动安装、升级、删除软件包的功能,可以自动解决软件包之间的依赖关系,使得用户更方便软件包的管理。要使用yum必须要进行配置,个人将其分为三类,本地yum源、局域网yum源、第三方yum源&#…

Linux上更新jar包里的某个class文件

目标:替换voice-1.0.jar里的TrackHandler.class文件 一.查询jar包里TrackHandler.class所在的路径 jar -tvf voice-1.0.jar |grep TrackHandler 二.解压出TrackHandler.class文件 jar -xvf voice-1.0.jar BOOT-INF/classes/com/yf/rj/handler/TrackHandler.cla…

机器学习中回归预测模型中常用四个评价指标MBE、MAE、RMSE、R2解释

在机器学习中,评估模型性能时常用的四个指标包括平均绝对误差(Mean Absolute Error, MAE)、均方误差(Mean Squared Error, MSE)、均方根误差(Root Mean Squared Error, RMSE)和决定系数&#xf…

基于SpringBoot的Jwt认证以及密码aes加密解密技术

目录 前言 1.SpringBoot项目的创建 2.相关技术 3.项目架构 4.项目关键代码 5.项目最终的运行效果 ​编辑 6.PostMan测试接口结果 前言 学习了SpringBoot之后,才觉得SpringBoot真的很方便,相比传统的SSH,SSM,SpringBo…

Spark SQL DML语句

【图书介绍】《Spark SQL大数据分析快速上手》-CSDN博客 《Spark SQL大数据分析快速上手》【摘要 书评 试读】- 京东图书 Spark本地模式安装_spark3.2.2本地模式安装-CSDN博客 DML(Data Manipulation Language,数据操作语言)操作主要用来对…

线性直流电流

电阻网络的等效 等效是指被化简的电阻网络与等效电阻具有相同的 u-i 关系 (即端口方程),从而用等效电阻代替电阻网络之后,不 改变其余部分的电压和电流。 串联等效: 并联等效: 星角变换 若这两个三端网络是等效的,从任…