當討論JavaScript中的原始資料類型時,大多數人都知道的基本知識,從String,Number到Boolean。這些原始類型相當簡單,行為符合常識。但是,本文將更聚焦在獨特的原始資料類型Null和Undefined,是什麼讓他們如此相似,卻又似是而非。
一、理解Null和Undefined
在JavaScript中,null是字面量同時也是語言中的關鍵字,用來表示無法辨識的物件值。換句話說,這用來表示「無值(no value)」。雖然相似,undefined實際上代表了不存在的值(non-existence of a value)。都是完全不可變的,沒有屬性和方法,也不能給其屬性賦值。事實上,試圖存取或定義一個屬性將會引發一個類型錯誤(TypeError)。正如他們的名字暗示的那樣,他們是完全無效的值。
沒有值代表的布林值是false,這表示他們在條件上下文中會被計算為false,如if語句。使用相等運算子(= =)比較這兩個值和其他false值,他們並不等於除了自己:
null == 0; // false undefined == ""; // false null == false; // false undefined == false; // false null == undefined; // true
儘管如此,和其他相似之處,但null和undefined並不是等價的。每個作為其獨特的類型的唯一成員,undefined是Undefined類型和null是Null類型。使用全等運算子(===)比較這兩個值,這要求類型和值都相等,下面證明這一點:
undefined === null; // false
這是一個重要的區別,服務於不同的目的和理由。區分這兩個值,你可以認為undefined代表一個意想不到的沒有值而null作為預期沒有值的代表。
二、產生Undefined
有許多的方法產生一個undefined值的程式碼。它通常會遇到當試圖存取不存在的值時。在這種情況下,在JavaScript這種動態的弱型別語言中,只會預設回傳一個undefined值,而不是上升為一個錯誤。
任何宣告變數時沒有提供一個初始值,都會有一個為undefined的預設值:
var foo; // 默认值为 undefined
當試圖存取一個不存在的物件屬性或陣列項目時,傳回一個undefined值:
var array = [1, 2, 3]; var foo = array.foo; // foo 属性不存在, 返回 undefined var item = array[5]; // 数组中没有索引为5的项,返回 undefined
如果省略了函數的回傳語句,回傳undefined:
var value = (function(){})(); // 返回 undefined
函數呼叫時未提供的值結果將為undefined參數值:
(function(undefined){ // 参数是 undefined })();
void運算子也可以傳回一個undefined值。像Underscore的庫使用它作為一個防禦式的類型檢查,因為它是不可變的,可以在任何上下文依賴返回undefined:
function isUndefined(obj){ return obj === void 0; }
最後,undefined是一個預先定義的全域變數(不像null關鍵字)初始化為undefined值:
'undefined' in window; // true
ECMAScript 5中,這個變數是唯讀的,以前並非如此。
三、Null的用例
null的用例是使他與眾不同的主要方面,因為不像undefined,null被認為更有用。這正是為什麼typeof運算子作用於null值時傳回「object」。最初的理由是,現在仍然是,通常用作一個空引用一個空物件的預期,就像一個佔位符。 typeof的這種行為已經被確認為一個錯誤,雖然提出了修正,出於後相容的目的,這一點已經保持不變。
這就是為什麼JavaScript環境從來沒有設定一個值為null;它必須以程式設計方式完成。正如文檔MDN所說:
在api中,null是經常檢索物件的地方可以預期,但沒有相關的物件。
這適用於DOM,它是獨立於語言的,不屬於ECMAScript規範的範圍。因為它是一個外部API,試圖取得一個不存在的元素傳回一個null值,而不是undefined。
一般來說,如果你需要給一個變數或屬性指定一個不變值,將它傳遞給一個函數,或者從一個函數返回null,null幾乎總是最好的選擇。簡而言之,JavaScript使用undefined並且程式設計師應該使用null。
null的另一個可行的用例,也被認為是良好的實踐是一個明確指定變數為無效(object= null)當一個引用不再是必需的。透過分配null值,有效地清除引用,並假設物件沒有引用其他程式碼,指定垃圾收集,確保回收記憶體。
四、深入挖掘
使null和undefined像黑洞的不只是他們的行為,而是在他們在JavaScript環境的內部的處理方式。他們似乎通常並不具有同樣的關聯特徵與其他原生或內建物件。
在ES5中,Object.prototype.toString方法,已經成為實際的類型檢查標準,這在null和undefined中被證明是一致的:
Object.prototype.toString.call(null); // [object Null] Object.prototype.toString.call(undefined); // [object Undefined]
然而,Object.prototype.toString方法其實並不是檢索null的內部[[Class]]屬性或undefined的公開建構子。根據文檔,以下步驟發生在被調用過程中:
如果值是undefined,則回傳「[object Undefined]」。
- 如果這個值為null,則回傳「[object Null]」。
- 讓O作為呼叫ToObject同時傳遞this值作為參數的結果值。
- 讓class是O的內部屬性[[Class]]的值。
- 傳回的結果連接三個字串“[object ”,class,和“]”的結果的字串值。
該方法執行一個簡單的字串回傳值,如果它偵測到null或undefined和其他物件統一的功能。在整個規範中這是很常見的,因為當遇到null和undefined值時大多數方法包含一個簡單的捕捉並傳回。事實上,沒有跡象表明他們包含與任何原生物件相關聯的內部屬性。就好像他們不是對象。我很想知道如果一個JavaScript的原生環境內部實際存在的明確方案會怎麼樣?也許有人更熟悉一個可以參與的實現。
結論
無論這些原生物件多麼不尋常,理解null和undefined之間的差異,和他們在JavaScript的語言基礎中截然不同的角色。它可能不能使你的應用程式有所突破,但是一般來說,它僅被證明在開發和調試中長期有益。
以上就是針對javascript中原始資料類型Null和Undefined進行的介紹,希望對大家的學習有所幫助。

選擇Python還是JavaScript取決於項目類型:1)數據科學和自動化任務選擇Python;2)前端和全棧開發選擇JavaScript。 Python因其在數據處理和自動化方面的強大庫而備受青睞,而JavaScript則因其在網頁交互和全棧開發中的優勢而不可或缺。

Python和JavaScript各有優勢,選擇取決於項目需求和個人偏好。 1.Python易學,語法簡潔,適用於數據科學和後端開發,但執行速度較慢。 2.JavaScript在前端開發中無處不在,異步編程能力強,Node.js使其適用於全棧開發,但語法可能複雜且易出錯。

javascriptisnotbuiltoncorc; sanInterpretedlanguagethatrunsonenginesoftenwritteninc.1)JavascriptwasdesignedAsignedAsalightWeight,drackendedlanguageforwebbrowsers.2)Enginesevolvedfromsimpleterterpretpretpretpretpreterterpretpretpretpretpretpretpretpretpretcompilerers,典型地,替代品。

JavaScript可用於前端和後端開發。前端通過DOM操作增強用戶體驗,後端通過Node.js處理服務器任務。 1.前端示例:改變網頁文本內容。 2.後端示例:創建Node.js服務器。

選擇Python還是JavaScript應基於職業發展、學習曲線和生態系統:1)職業發展:Python適合數據科學和後端開發,JavaScript適合前端和全棧開發。 2)學習曲線:Python語法簡潔,適合初學者;JavaScript語法靈活。 3)生態系統:Python有豐富的科學計算庫,JavaScript有強大的前端框架。

JavaScript框架的強大之處在於簡化開發、提升用戶體驗和應用性能。選擇框架時應考慮:1.項目規模和復雜度,2.團隊經驗,3.生態系統和社區支持。

引言我知道你可能會覺得奇怪,JavaScript、C 和瀏覽器之間到底有什麼關係?它們之間看似毫無關聯,但實際上,它們在現代網絡開發中扮演著非常重要的角色。今天我們就來深入探討一下這三者之間的緊密聯繫。通過這篇文章,你將了解到JavaScript如何在瀏覽器中運行,C 在瀏覽器引擎中的作用,以及它們如何共同推動網頁的渲染和交互。 JavaScript與瀏覽器的關係我們都知道,JavaScript是前端開發的核心語言,它直接在瀏覽器中運行,讓網頁變得生動有趣。你是否曾經想過,為什麼JavaScr

Node.js擅長於高效I/O,這在很大程度上要歸功於流。 流媒體匯總處理數據,避免內存過載 - 大型文件,網絡任務和實時應用程序的理想。將流與打字稿的類型安全結合起來創建POWE


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

記事本++7.3.1
好用且免費的程式碼編輯器