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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

考研互学互助系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库…

ASP.NET Core Web API Hangfire

ASP.NET Core Web API Hangfire 前言一、安装二、相关代码1.代码片段2.代码片段3.运行效果 三、测试代码1.即发即弃作业2.延迟作业3.重复作业4.延续作业5.页面调度作业 前言 👨‍💻👨‍🌾📝记录学习成果,以…

【Artificial Intelligence篇】AI 前沿探秘:开启智能学习的超维征程

目录 一、人工智能的蓬勃发展与智能学习的重要性: 二、数据的表示与处理 —— 智能学习的基石: 三、构建一个简单的感知机模型 —— 智能学习的初步探索: 四、神经网络 —— 开启超维征程的关键一步: 五、超维挑战与优化 —— 探索智能学习的深度: 六、可视化与交互 —— …

springboot502基于WEB的牙科诊所管理系统(论文+源码)_kaic

牙科诊所管理系统的设计与实现 摘要 近年来,信息化管理行业的不断兴起,使得人们的日常生活越来越离不开计算机和互联网技术。首先,根据收集到的用户需求分析,对设计系统有一个初步的认识与了解,确定牙科诊所管理系统的…

内置ALC的前置放大器D2538A/D3308

一、概述 D2538A/D3308是芯谷科技推出的带有ALC(自动电平控制)的前置音频放大器芯片,最初产品为单声道/立体声收录机及盒式录音机而开发,作为录音/回放的磁头放大器使用;由于产品的高增益、低噪声及ALC外部可调的特性&…

金仓数据库对象访问权限的管理

基础知识 对象的分类 数据库的表、索引、视图、缺省值、规则、触发器等等,都称为数据库对象,对象分为如下两类: 模式(SCHEMA)对象:可以理解为一个存储目录,包含视图、索引、数据类型、函数和操作符等。非模式对象:其他的数据库对象&#x…

pyQT + OpenCV相关练习

一、设计思路 1、思路分析与设计 本段代码是一个使用 PyQt6 和 OpenCV 创建的图像处理应用程序。其主要功能是通过一个图形界面让用户对图片进行基本的图像处理操作,如灰度化、翻转、旋转、亮度与对比度调整,以及一些滤镜效果(模糊、锐化、边…

mac中idea中英文版本切换

1.快捷键command,或者 2.找到插件(plugins),搜索chinese,安装 第一次安装好点击应用会提示重启,直接重启就好了,如果已经安装过,只需要切换中英文 3.中英文切换 外观与行为&#xf…

linux 7.6安装mysql 8.0步骤如下

linux 7.6安装mysql 8.0步骤如下: 注意:在导入密钥的时候这个不行,可更换为 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023

GEE云计算、多源遥感、高光谱遥感技术蓝碳储量估算;红树林植被指数计算及提取

大气温室气体浓度不断增加,导致气候变暖加剧,随之会引发一系列气象、生态和环境灾害。如何降低温室气体浓度和应对气候变化已成为全球关注的焦点。海洋是地球上最大的“碳库”,“蓝碳”即海洋活动以及海洋生物(特别是红树林、盐沼和海草&…

头部固定的响应式jQuery表格插件

jquery.fixme是一款头部固定的响应式jQuery表格插件。该表格通过jQuery来构造固定的表格头效果&#xff0c;在页面向下滚动时&#xff0c;表格头固定在页面的顶部。 在线预览 下载 使用方法 HTML结构 该表格的HTML结构使用标准的HTML表格的结构&#xff1a; <table clas…

系统思考—冰山模型

“卓越不是因机遇而生&#xff0c;而是智慧的选择与用心的承诺。”—— 亚里士多德 卓越&#xff0c;从来不是一次性行为&#xff0c;而是一种习惯。正如我们在日常辅导中常提醒自己&#xff1a;行为的背后&#xff0c;隐藏着选择的逻辑&#xff0c;而选择的根源&#xff0c;源…

基于aspose.words组件的word bytes转pdf bytes,去除水印和解决linux中文乱码问题

详情见 https://preferdoor.top/archives/ji-yu-aspose.wordszu-jian-de-word-byteszhuan-pdf-bytes

文档大师:打造一站式 Word 报告解决方案1

前言 在政府、医院、银行、财务以及销售等领域&#xff0c;常常需要创建各种报告文件来展开工作汇报&#xff0c;譬如季度销售报告、年度总结报告、体检报告和保险合同等。在没有报表工具支持之前&#xff0c;这类报告主要通过 Word 制作&#xff0c;费时费力且难以维护&#…

不安全物联网的轻量级加密:综述

Abstract 本文综述了针对物联网&#xff08;IoT&#xff09;的轻量级加密解决方案。这项综述全面覆盖了从轻量级加密方案到不同类型分组密码的比较等多个方面。同时&#xff0c;还对硬件与软件解决方案之间的比较进行了讨论&#xff0c;并分析了当前最受信赖且研究最深入的分组…

实现某海外大型车企(T)Cabin Wi-Fi 需求的概述 - 4

大家好&#xff0c;我是Q&#xff0c;邮箱&#xff1a;1042484520qq.com。 今天我们在上几讲的基础上再扩展下 Cabin Wi-Fi 的功能需求&#xff0c;讲讲如何使能 5G TCU Wi-Fi STA Bridge 模式。 参考&#xff1a; 实现某海外大型车企&#xff08;T&#xff09;Cabin Wi-Fi 需求…

当视觉提示调优遇到无源领域自适应语义分割

首先将源预训练骨干与冻结参数分为多个阶段&#xff0c;并提出了一个轻量级的提示适配器&#xff0c;用于渐进地将信息性知识编码为提示&#xff0c;并增强相邻骨干阶段之间目标特征的泛化。 同时&#xff0c;设计了一种具有多尺度一致性损失的新型自适应伪标签校正策略&#x…

40.2 预聚合和prometheus-record使用

本节重点介绍 : downsample降采样可以降低查询数据量 prometheus原生不支持downsample 实时查询/聚合 VS 预查询/聚合的优缺点 实时查询/聚合条件随意组合&#xff0c;性能差预查询/聚合 性能好&#xff0c;聚合条件需要提前定义 prometheus的预查询/聚合配置举例 downsample…

Docker安装GPUStack详细教程

目录 前置条件 安装Nvidia Container Tooikit 前置条件 DockerNvidia Container Toolkit 安装Nvidia Container Tooikit 1.安装必要的包 # 更新系统 sudo apt update && sudo apt upgrade -y# 安装 CUDA 相关包 sudo apt-get install -y cuda-drivers nvidia-cuda-…

Intent--组件通信

组件通信1 获取子活动的返回值 创建Activity时实现自动注册&#xff01;【Activity必须要注册才能使用】 默认 LinearLayout 布局&#xff0c;注意 xml 中约束布局的使用&#xff1b; 若需要更改 线性布局 只需要将标签更改为 LinearLayout 即可&#xff0c;记得 设置线性布局…