1. 程式人生 > >javascript的null、undefined和布林資料型別

javascript的null、undefined和布林資料型別

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

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

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

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

一、概述

//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可以自動轉為0

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是一個表示“空”的物件,轉為數值時為0undefined是一個表示"此處無定義"的原始值,轉為數值時為NaN

二、用法和含義

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

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
  • 0
  • 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