【轉】javascript中not defined、undefined、null以及NaN的區別

来源:https://www.cnblogs.com/JamesBlog1995/archive/2018/09/26/9707883.html
-Advertisement-
Play Games

原文鏈接(點擊跳轉) 第一:not defined 演示代碼: <span style="font-size:12px;"><span style="font-family:Microsoft YaHei;"><script type="text/javascript"> <span style=" ...


原文鏈接(點擊跳轉)

第一:not defined

演示代碼:

  1.   <span style="font-size:12px;"><span style="font-family:Microsoft YaHei;"><script type="text/javascript">
  2.   alert(a);
  3.   </script></span></span>

執行結果:報錯並提示:Uncaught ReferenceError: a is not defined,如圖:

個人理解:not defined可以翻譯為 未定義的。上面代碼中的a沒有被定義。所以會報錯並提示not defined。

第二:undefined(js的數據類型之一)

演示代碼:

  1.   <span style="font-family:Microsoft YaHei;font-size:12px;"><script type="text/javascript">
  2.   var a;
  3.   alert(a);
  4.   </script></span>

或者

  1.   <span style="font-family:Microsoft YaHei;font-size:12px;"><script type="text/javascript">
  2.   var a=undefined;
  3.   alert(a);
  4.   </script></span>

或者

  1.   <span style="font-family:Microsoft YaHei;font-size:12px;"><script type="text/javascript">
  2.   var a={};
  3.   alert(a);
  4.   </script></span></span>   第三種被博友指出錯誤,這裡應該是:
    1.   <span style="font-family:Microsoft YaHei;font-size:12px;"><script type="text/javascript">
    2.   alert(typeof b);
    3.   </script></span></span>

執行結果:上面三段代碼執行結果一樣:不會報錯,會列印出undefined,如圖:

個人理解:上面出現undefined的三種情況,

第一是變數被聲明瞭,但沒有賦值;

第二是手工賦值為undefined,undefined只是一個值;

第三是一個不存在的對象成員為undefined。

註意:undefined除了手工賦值之外,其他情況都可以翻譯成:不明確的,也就是不知道用來幹嘛的,表示缺少值,就是某個地方應該有一個值,但是還沒有初始化。undefined 的優點在於正常使用有此值的變數不會拋出異常。

第三:null

演示代碼:

  1.   <span style="font-family:Microsoft YaHei;font-size:12px;"><script type="text/javascript">
  2.   var a=document.getElementById("main");
  3.   alert(a);
  4.   </script></span>

執行結果:不會報錯,會列印出null,如圖:

個人理解:上面的代碼中如果實際上沒有id為main的元素,a則是null,所以null是真正不存在的東西。另外null是一個只有一個值的特殊類型。表示一個空對象引用,用typeof檢測返回是object。第二種的undefined是派生自null,所以有undefined==null。

第四:NaN

演示代碼:

  1.   <span style="font-family:Microsoft YaHei;font-size:12px;"><script type="text/javascript">
  2.   var a;
  3.   alert(a*2);
  4.   </script></span>

執行結果:不會報錯,會列印出NaN,如圖:

個人理解:NaN是"Not a Number " 的簡寫,從字面上看為不是數字的意思,當運算無法返回正確的數值時,就會返回NaN值。也可以理解一下W3C給出的定義和用法:NaN 屬性是代表非數字值的特殊值。該屬性用於指示某個值不是數字。可以把 Number 對象設置為該值,來指示其不是數字值。

null是一種特殊的object;NaN是一種特殊的number。 

 

【 補充擴展 

深入談談undefined與null,以下內容部分參考自網路。

大多數電腦語言,有且僅有一個表示"無"的值,比如,C語言的NULL,Java語言的null,Python語言的None,Ruby語言的nil。有點奇怪的是,JavaScript語言居然有兩個表示"無"的值:undefined和null。這是為什麼?

在JavaScript中,將一個變數賦值為undefined或null,老實說,幾乎沒區別。

 

  1.   <span style="font-family:Microsoft YaHei;font-size:12px;"><script type="text/javascript">
  2.   var a=undefined;
  3.   var a=null;
  4.   </script></span>

《Speaking JavaScript》這本書中有講到上面的這個問題:JavaScript語言為什麼有兩個表示"無"的值。
1995年JavaScript誕生時,最初像Java一樣,只設置了null作為表示"無"的值,但是,JavaScript的設計者Brendan Eich,覺得這樣做還不夠。第一:null像在Java里一樣,被當成一個對象。但是,JavaScript的數據類型分成原始類型(primitive)和合成類型(complex)兩大類,Brendan Eich覺得表示"無"的值最好不是對象。第二:其次,JavaScript的最初版本沒有包括錯誤處理機制,發生數據類型不匹配時,往往是自動轉換類型或者默默地失敗。Brendan Eich覺得,如果null自動轉為0,很不容易發現錯誤。因此,Brendan Eich又設計了一個undefined。

null表示"沒有對象",即該處不應該有值;undefined表示"缺少值",就是此處應該有一個值,但是還沒有初始化。

本篇文章就總結到這裡。最後,由於時間倉促,資質有限,文中要是有表述不准確的地方還望見諒,也歡迎指正。

--------------------- 本文來自 鍵盤上的草根舞者 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/xjun0812/article/details/49444771?utm_source=copy 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一.文檔流 1.概念 2.BFC(Block formatting context) 3.BFC規則 內部的Box會在垂直方向,一個接一個地放置。 Box自身垂直方向的位置由margin top決定,屬於同一個BFC的兩個相鄰Box的margin會發生重疊。 Box自身水平方向的位置由margin左 ...
  • 一,vue.js簡介 Vue.js可以作為一個js庫來使用,也可以用它全套的工具來構建系統界面,這些可以根據項目的需要靈活選擇 所以說, vue.js是一套構建用戶界面的漸進式框架 Vue.js的核心庫只關註視圖層,Vue的目標通過儘可能簡單的API實現相應的數據綁定, 在這一點上Vue.js類似於 ...
  • 1.多個標簽寫在一行 效果前: 效果後: 2.將要閉合標簽的地方與開始標簽的地方重合 3.使用註釋頭尾相連 4.在img標簽的父級上寫:font-size:0; 推薦是用這個方法。這個方法我已經實踐簡單實用 效果: 5.使用display:block(img是內聯元素) 效果: 6.使用letter ...
  • 開發者的javascript造詣取決於對【動態】和【非同步】這兩個詞的理解水平。 一. 別人是開發者,你也是 技術是【 非同步編程】這個話題中非常重要的,它一度讓我感到熟悉又陌生,我熟悉其所有的 並能夠在編程中相對熟練地運用,卻對其中原理和軟體設計思想感到陌生,即便我讀了很多源碼分析和教程也一度很難理解 ...
  • 全面我們學了6個選擇器,今天再來學習兩個選擇器,分別是通配符選擇器和並集選擇器: 1.通配符選擇器: *{ } 表示body里所有的標簽都被選中 2.並集選擇器: 選中的標簽之間用逗號隔開,表示這幾個標簽都被選中 *選擇器 有好處也有弊端 好處 就是省事,弊端,就是因為太省事了,加大了瀏覽器的負荷。 ...
  • 一.概述 超文本標記語言(Hyper Text Markup Language),HTML是一門描述性的語言.基本語法: <標簽> 內容 </標簽>** 在一個網頁中,HTML是網頁的結構,CSS是網頁的外觀,JS是網頁的行為。 二.文檔結構 1.文檔聲明DOCTYPE 文檔聲明用於識別HTML的版 ...
  • 一、Jquery簡介 Jquery是一個優秀的Javascrīpt框架。它是輕量級的js庫(壓縮後只有21k) ,它相容CSS3,還相容各種瀏覽器 (IE 6.0+, FF 1.5+, Safari 2.0+, Opera 9.0+)。 Jquery應用到我們的項目中能夠使程式員從設計和書寫繁雜的J ...
  • position定位與表單 一、position 1、Position細說 Position:relative; Left:100px; Top:100px; Position:absolute; Left:100px; Top:100px; Position:relative;如果設置值了,相對原 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...