天天看點

javascript的null、undefined和布爾資料類型

javascript中  有null、undefined 在使用typeof 時候 

console.log(typeof null); //object
console.log(typeof undefined) //undefined
           

null

undefined

都可以表示“沒有”,含義非常相似。将一個變量指派為

undefined

null

,老實說,文法效果幾乎沒差別。

兩個類型到底有什麼差別,什麼場景使用是個頭疼的問題。

一、概述

//1.在

if

語句中,它們都會被自動轉為

false

,相等運算符(

==

)甚至直接報告兩者相等。

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

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

可以自動轉為

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

Number(undefined) // NaN
5 + undefined // NaN
           

但是,JavaScript 的設計者 Brendan Eich,覺得這樣做還不夠。首先,第一版的 JavaScript 裡面,

null

就像在 Java 裡一樣,被當成一個對象,Brendan Eich 覺得表示“無”的值最好不是對象。其次,那時的 JavaScript 不包括錯誤處理機制,Brendan Eich 覺得,如果

null

自動轉為0,很不容易發現錯誤。

是以,他又設計了一個

undefined

。差別是這樣的:

null

是一個表示“空”的對象,轉為數值時為

undefined

是一個表示"此處無定義"的原始值,轉為數值時為

NaN

二、用法和含義

對于

null

undefined

,大緻可以像下面這樣了解。

null
1.通過id擷取元素如果擷取不到内容,那麼預設傳回值是null
2.如果要銷毀對象的堆記憶體,那麼就給對象指派null
3.正則進行捕獲,捕獲不到内容,那麼傳回值就是null;

undefined
1.如果變量隻聲明,沒有指派,那麼預設存儲的值就是undefined;
2.如果擷取對象的屬性名和對應的屬性值,如果屬性名不存在,擷取的就是undefined
3.如果函數沒有對象的實參,那麼形參預設存儲的值就是undefined
4.如果函數沒有return,那麼預設的傳回值也是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
           

--------------------------------------------------------------------------------------------------------------------------------------------------------------------

下面我們在說一說布爾資料類型(boolean)

布爾類型

布爾值代表“真”和“假”兩個狀态。“真”用關鍵字

true

表示,“假”用關鍵字

false

表示。布爾值隻有這兩個值。

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

  • 前置邏輯運算符: 

    !

     (Not)
  • 相等運算符:

    ===

    !==

    ==

    !=

  • 比較運算符:

    >

    >=

    <

    <=

關于布爾類型的轉換是要說的重點,因為這确實不符合我們之前學習語言轉換的規律

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

false

,其他值都視為

true

  • undefined

  • null

  • false

  • NaN

  • ""

    ''

    (空字元串)

總結:請記住隻有以上6種情況會轉換為false

console.log(Boolean(0));   //false
console.log(Boolean(NaN)); //false
console.log(Boolean("")); //false
console.log(Boolean('')); //false
console.log(Boolean(" ")); //true
console.log(Boolean("0")); //true
console.log(Boolean(null)); //false
console.log(Boolean(undefined)); //false
console.log(Boolean([])); //true
console.log(Boolean({})) //true
           

繼續閱讀