未定義 undefined
-
定義
這種數據類型只有一個值,就是undefined
表示"缺少值",就是此處應該有一個值,但是還沒有定義
-
常見位置(常見用法)
- 變量被聲明了,但沒有賦值時,就等于undefined
var a;
a //undefined
- 調用函數時,應該提供的參數沒有提供,該參數的值為undefined
function fn(a){
console.log(a); //undefined
};
fn();
- 對象沒有賦值的屬性,該屬性的值為undefined
var a=1;
console.log(a.style); //undefined
- 函數沒有返回值時,默認返回undefined
var a = function fn(){
alert(1); //1
};
console.log(fn()); //undefined
空 null
-
定義
這種數據類型只有一個值,就是null
null表示"沒有對象",即該處不應該有值
-
常見位置(常見用法)
- 獲取頁面中不存在的東西,返回值為null
var btn = document.getElementById('btn'); //頁面中沒有btn這個id
a //null
- 調用函數時,不需要傳入某個參數,這時就可以傳入null
- 作為對象原型鏈的終點
注意:JavaScript的標識名區分大小寫,undefined和null不同于Undefined和Null(或者其他僅僅大小寫不同的詞形),后者只是普通的變量名
兩者對比
-
關于變量
var a;
a //undefined
a == null //true 存在數據類型轉換,a被轉換成了undefined,而undefined == null,故這里為true
a == undefined //true
a === null //false
a === undefined //true
typeof a //'undefined'
-
大小判斷
if(!null){ //存在隱式類型轉換,將null轉換為false
alert(1); //故這里彈出1
}
if(!undefined){ //存在隱式類型轉換,將undefined轉換為false
alert(1); //故這里彈出1
}
//undefined和null在if語句中,都會被自動轉為false
//故下面的undefined == null的結果為true
undefined == null //true 存在隱式類型轉換,undefined和null都被轉換為false
undefined === null //false
-
typeof返回值
typeof undefined //'undefined'
typeof null //'object'
//并不是說null的數據類型就是對象,而是JavaScript早期部署中的一個約定俗成,其實不完全正確,后來再想改已經太晚了,會破壞現存代碼,所以一直保留至今
-
Number()返回值
Number(undefined) //NaN
Number(null) //0