未定義 undefined
-
定義
這種數(shù)據(jù)類型只有一個(gè)值,就是undefined
表示"缺少值"歇父,就是此處應(yīng)該有一個(gè)值蒂培,但是還沒有定義
-
常見位置(常見用法)
- 變量被聲明了,但沒有賦值時(shí)榜苫,就等于undefined
var a;
a //undefined
- 調(diào)用函數(shù)時(shí)护戳,應(yīng)該提供的參數(shù)沒有提供,該參數(shù)的值為undefined
function fn(a){
console.log(a); //undefined
};
fn();
- 對象沒有賦值的屬性垂睬,該屬性的值為undefined
var a=1;
console.log(a.style); //undefined
- 函數(shù)沒有返回值時(shí)媳荒,默認(rèn)返回undefined
var a = function fn(){
alert(1); //1
};
console.log(fn()); //undefined
空 null
-
定義
這種數(shù)據(jù)類型只有一個(gè)值,就是null
null表示"沒有對象"驹饺,即該處不應(yīng)該有值
-
常見位置(常見用法)
- 獲取頁面中不存在的東西钳枕,返回值為null
var btn = document.getElementById('btn'); //頁面中沒有btn這個(gè)id
a //null
- 調(diào)用函數(shù)時(shí),不需要傳入某個(gè)參數(shù)赏壹,這時(shí)就可以傳入null
- 作為對象原型鏈的終點(diǎn)
注意:JavaScript的標(biāo)識名區(qū)分大小寫鱼炒,undefined和null不同于Undefined和Null(或者其他僅僅大小寫不同的詞形),后者只是普通的變量名
兩者對比
-
關(guān)于變量
var a;
a //undefined
a == null //true 存在數(shù)據(jù)類型轉(zhuǎn)換蝌借,a被轉(zhuǎn)換成了undefined昔瞧,而undefined == null,故這里為true
a == undefined //true
a === null //false
a === undefined //true
typeof a //'undefined'
-
大小判斷
if(!null){ //存在隱式類型轉(zhuǎn)換菩佑,將null轉(zhuǎn)換為false
alert(1); //故這里彈出1
}
if(!undefined){ //存在隱式類型轉(zhuǎn)換自晰,將undefined轉(zhuǎn)換為false
alert(1); //故這里彈出1
}
//undefined和null在if語句中,都會被自動(dòng)轉(zhuǎn)為false
//故下面的undefined == null的結(jié)果為true
undefined == null //true 存在隱式類型轉(zhuǎn)換擎鸠,undefined和null都被轉(zhuǎn)換為false
undefined === null //false
-
typeof返回值
typeof undefined //'undefined'
typeof null //'object'
//并不是說null的數(shù)據(jù)類型就是對象缀磕,而是JavaScript早期部署中的一個(gè)約定俗成,其實(shí)不完全正確劣光,后來再想改已經(jīng)太晚了袜蚕,會破壞現(xiàn)存代碼,所以一直保留至今
-
Number()返回值
Number(undefined) //NaN
Number(null) //0