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.pswp.cn/web/64350.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64350.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64350.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

虛幻引擎結構之UWorld

Uworld -> Ulevel ->Actors -> AActor 在虛幻引擎中,UWorld 類扮演著至關重要的角色,它就像是游戲世界的總指揮。作為游戲世界的核心容器,UWorld 包含了構成游戲體驗的眾多元素,從游戲實體到關卡設計,再到物…

java中logback怎么開啟異步功能

在Java中使用Logback時,開啟異步日志記錄功能可以通過配置AsyncAppender來實現。異步日志記錄可以顯著提高應用程序的性能,因為它將日志記錄操作從主線程移到了后臺線程執行,從而減少了主線程的阻塞時間。 步驟 1: 添加 Logback 配置文件 確…

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)中的數據。在這些文件中,我們可以加密用戶名、密碼等。 您經常會遇到…

【Vue】如何在 Vue 3 中使用組合式 API 與 Vuex 進行狀態管理的詳細教程

如何在 Vue 3 中使用組合式 API 與 Vuex 進行狀態管理的詳細教程。 安裝 Vuex 首先,在你的 Vue 3 項目中安裝 Vuex。可以使用 npm 或 yarn: npm install vuexnext --save # or yarn add vuexnext創建 Store 在 Vue 3 中,你可以使用 creat…

七、隊列————相關概念詳解

隊列————相關概念詳解 前言一、隊列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…

leetcode 3083. 字符串及其反轉中是否存在同一子字符串 簡單

給你一個字符串 s ,請你判斷字符串 s 是否存在一個長度為 2 的子字符串,在其反轉后的字符串中也出現。 如果存在這樣的子字符串,返回 true;如果不存在,返回 false 。 示例 1: 輸入:s "…

TCP-UDP調試工具推薦:Socket通信測試教程(附詳細圖解)

前言 在網絡編程與應用開發中,調試始終是一項不可忽視的重要環節。尤其是在涉及TCP/IP、UDP等底層網絡通信協議時,如何確保數據能夠準確無誤地在不同節點間傳輸,是許多開發者關注的核心問題。 調試的難點不僅在于定位連接建立、數據流控制及…

Vue.js框架:在線教育系統的安全性與穩定性

2.1系統開發使用的關鍵技術 本系統在開發中選擇B/S框架進行設計,語言采用Java,數據庫采用Mysql,并在設計中加入VUE.js技術,本系統的運行環境為Idea。 2.2 VUE.js技術介紹 VUE.js是一個用來開發前臺界面的JavaScript框架&#xff0…

【新方法】通過清華鏡像源加速 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…