首頁  >  文章  >  web前端  >  JavaScript中表示空的undefined與null的差異及用法

JavaScript中表示空的undefined與null的差異及用法

黄舟
黄舟原創
2017-02-28 14:50:151902瀏覽

我剛開始學習JavaScript的時候 

就覺得undefined挺新鮮
因為其他語言沒有
而且不只有undefined,居然還有一個表示空的null
我相信很多同學都說不出來undefined與null有什麼區別
今天我就總結一下JavaScript中表示空的undefined與null的區別

相似

undefined和null都是JavaScript中的基本型別
而且它們的型別值各只有一個,就是undefined和null,與它們的型別同名
正常來說,這兩個值看起來還真沒什麼差別

var foo = undefined;
var foo = null;

#而且標準還有這樣的規定

console.log(null == undefined) // true

(但是null !== undefined

轉換為布林值都是false

if(!undefined){
    console.log(1);//1}if(!null){
    console.log(1);//1}

區別

但其實,有差別
先來看看這幾行程式碼

console.log(undefined in window);// trueconsole.log(null in window);// false

這是其中不同的一點
null是JavaScript的關鍵字
而undefined是window上的一個特殊的的屬性(和NaN、Infinity一樣)
雖然ES5undefined變成只讀屬性,但是仍然有不合理的地方,比如說這樣

function fn(){
    var undefined = 1;// 注意:前方高能
    console.log(undefined);// 1}
fn();

看吧,因為undefined不是關鍵字,所以我們可以在局部變數中宣告undefined(簡直無語)
即便你是嚴格模式

function fn(){    "use strict";    var undefined = 1;
    console.log(undefined);// 1}
fn();

我們可千萬不要寫這麼令人髮指的程式碼

在進行數學運算時也存在差異

console.log(undefined + 1); //NaNconsole.log(null + 1); //1

undefined進行任何運算會轉換為NaN
而null轉換為0

歷史

JavaScript有兩種表示空的值是有道理的
js之父Brendan Eich最開始設計得時候像Java一樣,只有null
但是他考慮到js有基本值和引用值兩種
用一個物件來表示空怪怪的typeof null === 'object',而且null轉換為數字0導致很多bug不好找
於是他又設計了undefined

用法

#依照js之父的設計
undefined表示缺少值
null表示為空物件
但是現在我們並不是這樣使用的

#可以這樣來理解
undefined表示變數沒有初始化,沒有值
null表示變數初始化了,值為「空值」

undefined是js用的,而null是給我們用的
這句話不知道大家能不能理解
例如在這些情況

  • var a; 宣告變量,引擎會在預編譯給它賦上預設值undefined

  • function a(){} 宣告函數,沒有回傳值預設回傳undefined

  • var obj = {};obj.a; 存取不存在的物件屬性,預設值undefined

  • #var a = function(a){};a(); 沒有指定實參,預設參數值undefined

這都是系統給我們預設的undefined,也就是js使用的
而我們要用的是null
比如說

  • var obj = Object.create(null); 建立空物件

  • #demo.onclick = null; 解除綁定事件

  • #……

只要我們想要使用空,就用null肯定沒錯,某些情況還可以方便瀏覽器的垃圾回收

總結

#最後給大家總結一下

  • undefined是window上的特殊屬性,是標識符,可以賦值;null是特殊關鍵字,不是標識符,不能賦值

  • undefined == null –> true | undefined = == null –> false

  • undefined轉換為number為NaN,null轉換為number為0

  • undefined與null轉換為boolean都是false

  • undefined表示沒有值,null表示空值

  • 我們應該使用null表示空而不要使用undefined

  • 永遠不要重定義undefined

 以上就是JavaScript中表示空的undefined與null的區別及用法的內容,更多相關內容請關注PHP中文網(www.php.cn)!


#
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn