null, undefined 和布爾值


說明:此類博客來自以下鏈接,對原內容做了標注重點知識,此處僅供自己學習參考!

來源:https://wangdoc.com/javascript/basic/introduction.html

1.null 和 undefined

1.1 概述

nullundefined都可以表示“沒有”,含義非常相似。將一個變量賦值為undefinednull,老實說,語法效果幾乎沒區別。

var a = undefined; // 或者 var a = null; 

上面代碼中,變量a分別被賦值為undefinednull,這兩種寫法的效果幾乎等價。

if語句中,它們都會被自動轉為false,相等運算符(==)甚至直接報告兩者相等。

if (!undefined) { console.log('undefined is false'); } // undefined is false if (!null) { console.log('null is false'); } // null is false undefined == null // true 

從上面代碼可見,兩者的行為是何等相似!谷歌公司開發的 JavaScript 語言的替代品 Dart 語言,就明確規定只有null,沒有undefined

既然含義與用法都差不多,為什么要同時設置兩個這樣的值,這不是無端增加復雜度,令初學者困擾嗎?這與歷史原因有關。

1995年 JavaScript 誕生時,最初像 Java 一樣,只設置了null表示"無"。根據 C 語言的傳統,null可以自動轉為0

Number(null) // 0 5 + null // 5 

上面代碼中,null轉為數字時,自動變成0。

但是,JavaScript 的設計者 Brendan Eich,覺得這樣做還不夠。首先,第一版的 JavaScript 里面,null就像在 Java 里一樣,被當成一個對象,Brendan Eich 覺得表示“無”的值最好不是對象。其次,那時的 JavaScript 不包括錯誤處理機制,Brendan Eich 覺得,如果null自動轉為0,很不容易發現錯誤。

因此,他又設計了一個undefined區別是這樣的:null是一個表示“空”的對象,轉為數值時為0undefined是一個表示"此處無定義"的原始值,轉為數值時為NaN

Number(undefined) // NaN 5 + undefined // NaN
*:NaN 屬性是代表非數字值的特殊值。該屬性用於指示某個值不是數字。可以把 Number 對象設置為該值,來指示其不是數字值。

1.2 用法和含義

對於nullundefined,大致可以像下面這樣理解。

null表示空值,即該處的值現在為空。調用函數時,某個參數未設置任何值,這時就可以傳入null,表示該參數為空。比如,某個函數接受引擎拋出的錯誤作為參數,如果運行過程中未出錯,那么這個參數就會傳入null,表示未發生錯誤。

undefined表示“未定義”,下面是返回undefined的典型場景。

// 變量聲明了,但沒有賦值 var i; i // undefined // 調用函數時,應該提供的參數沒有提供,該參數等於 undefined function f(x) { return x; } f() // undefined // 對象沒有賦值的屬性 var o = new Object(); o.p // undefined // 函數沒有返回值時,默認返回 undefined function f() {} f() // undefined 

2. 布爾值

布爾值代表“真”和“假”兩個狀態。“真”用關鍵字true表示,“假”用關鍵字false表示。布爾值只有這兩個值。

下列運算符會返回布爾值:

  • 前置邏輯運算符: ! (Not)
  • 相等運算符:===!====!=
  • 比較運算符:>>=<<=

如果 JavaScript 預期某個位置應該是布爾值,會將該位置上現有的值自動轉為布爾值。轉換規則是除了下面六個值被轉為false,其他值都視為true

  • undefined
  • null
  • false
  • 0
  • NaN
  • ""''(空字符串)

布爾值往往用於程序流程的控制,請看一個例子。

if ('') { console.log('true'); } // 沒有任何輸出 

上面代碼中,if命令后面的判斷條件,預期應該是一個布爾值,所以 JavaScript 自動將空字符串,轉為布爾值false,導致程序不會進入代碼塊,所以沒有任何輸出。

注意,空數組([])和空對象({})對應的布爾值,都是true

if ([]) { console.log('true'); } // true if ({}) { console.log('true'); } // true 

更多關於數據類型轉換的介紹,參見《數據類型轉換》一章。

3. 參考鏈接


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM