null和undefined的異同

1、簡單介紹

null 和undefined都是JavaScript裏的簡單數據類型,平時很容易弄混他倆的用法與區別。通常靜態類型語言裏都只有一個來表示「空」的類型,好比java裏的null,那爲何JavaScript裏有兩個呢?javascript

在設計JavaScript之初,就只有null來表明空,null能夠經過Number()轉換成0。可是設計者以爲一個不夠。緣由以下:java

1. null被當成一個對象,在JavaScript中,有原始類型和合成類型兩大類,設計者以爲用對象來表示空很差。bash

2. JavaScript設計之初沒有錯誤處理機制,若是數據類型不匹配,要麼自動轉換類型,要麼就默默失敗,null會自動轉換成0,這樣很不容易發現錯誤。函數

因此,undefined誕生了。ui

2、null和undefined的相同

1. 在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複製代碼

2.  兩者經過parseInt轉換都是NaN

parseInt(null)
NaN
parseInt(undefined)
NaN複製代碼

3、兩者的不一樣

最初的時候區分是這樣的: null表示一個無的對象,轉換爲數值時是0, undefined表示無的原始值,轉成數值是NaN.spa

可是實際用的時候,發現不行啊 ,他倆太像了。prototype

null表示沒有對象,此處不應有值。設計

常常用在: code

①表示函數的參數,表明此參數不是對象 對象

② 做爲對象原始鏈的終點。

Object.getPrototypeOf(Object.prototype)
// null複製代碼

undefined表示缺值,就是此處應該有值,可是沒定義。

常常用在:

①變量聲明瞭可是沒定義值;

②調用函數的時候,該傳的參數沒傳,此時參數就是undefined

③對象沒有賦值的屬性,該屬性值爲undefined;

④ 函數沒返回值時默認返回undefined

var i;
i // undefined

function f(x){console.log(x)}
f() // undefined

var  o = new Object();
o.p // undefined

var x = f();
x // undefined
複製代碼
相關文章
相關標籤/搜索