javascript 中null和undefined區分和比較,nullundefined

來源:互聯網
上載者:User

javascript 中null和undefined區分和比較,nullundefined

javascript 中null和undefined區分和比較

Undefined類型

Undefined 類型只有一個值,即特殊 undefined 。在使用 var 聲明變數但未對其加以初始化時,這個變數的值就是 undefined ,

例如:

var message;alert(message == undefined); //true

這個例子只聲明了變數 message ,但未對其進行初始化。比較這個變數與 undefined 字面量,結果表明它們是相等的。這個例子與下面的例子是等價的:

var message = undefined;alert(message == undefined); //true

這個例子使用 undefined 值顯式初始化了變數message 。但我們沒有必要這麼做,因為未經初始化的值預設就會取得 undefined 值。

一般而言,不存在需要顯式地把一個變數設定為undefined 值的情況。字面值 undefined 的主要目的是用於比較,而ECMA-262第3版之前的版本中並沒有規定這個值。第3版引入這個值是為了正式區分Null 物件指標與未經初始化的變數。

不過,包含 undefined 值的變數與尚未定義的變數還是不一樣的。看看下面這個例子:

 var message; // 這個變數聲明之後預設取得了undefined值// 下面這個變數並沒有聲明// var age  alert(message);  // "undefined"alert(age);  // 產生錯誤

運行以上代碼,第一個警告框會顯示變數message 的值,即 “undefined” 。而第二個警告框——由於傳遞給 alert() 函數的是尚未聲明的變數age ——則會導致一個錯誤。對於尚未聲明過的變數,只能執行一項操作,即使用 typeof 操作符檢測其資料類型(對未經聲明的變數調用delete 不會導致錯誤,但這樣做沒什麼實際意義,而且在strict 模式下確實會導致錯誤)。

然而,令人困惑的是:對未初始化的變數執行typeof 操作符會返回 undefined 值,而對未聲明的變數執行typeof操作符同樣也會返回undefined值。來看下面的例子:

var message; // 這個變數聲明之後預設取得了undefined值// 下面這個變數並沒有聲明 // var agealert(typeof message);  // "undefined" alert(typeof age);  // "undefined"

結果表明,對未初始化和未聲明的變數執行 typeof 操作符都返回了 undefined 值;這個結果有 其邏輯上的合理性。因為雖然這兩種變數從技術角度看有本質區別,但實際上無論對哪種變數也不可能執行真正的操作。

提示:

即便未初始化的變數會自動被賦予undefined值,但顯式地初始設定變數依然是明智的選擇。如果能夠做到這一點,那麼當typeof操作符返回”undefined”值時,我們就知道被檢測的變數還沒有被聲明,而不是尚未初始化。

Null類型

Null 類型是第二個只有一個值的資料類型,這個特殊的值是null。從邏輯角度來看, null 值表示一個 Null 物件指標 ,而這也正是使用 typeof 操作符檢測 null 值時會返回 “object” 的原因,如下面的例子所示:

 var car = null; alert(typeof car);  // "object"

如果定義的變數準備在將來用於儲存對象,那麼最好將該變數初始化為 null 而不是其他值。這樣一來,只要直接檢查null值就可以知道相應的變數是否已經儲存了一個對象的引用,如下面的例子所示:

if (car != null){// 對car對象執行某些操作}實際上,undefined值是派生自null值的,因此ECMA-262規定對它們的相等性測試要返回true:alert(null == undefined);  //true

這裡,位於 null 和 undefined 之間的相等操作符(==)總是返回 true ,不過要注意的是,這個操作符出於比較的目的會轉換其運算元,儘管null 和 undefined 有這樣的關係,但它們的用途完全不同。如前所述,無論在什麼情況下都沒有必要把一個變數的值顯式地設定為 undefined,可是同樣的規則對 null 卻不適用。換句話說,只要意在儲存對象的變數還沒有真正儲存對象,就應該明確地讓該變數儲存 null 值。這樣做不僅可以體現null 作為空白對象指標的慣例,而且也有助於進一步區分 null 和 undefined。

 感謝閱讀,希望能協助到大家,謝謝大家對本站的支援!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.