1.not defined
console.log(a);
//報(bào)錯(cuò):a is not defined 終止運(yùn)行
執(zhí)行結(jié)果:報(bào)錯(cuò)并提示:Uncaught ReferenceError: a is not defined鲤脏,如圖:
個(gè)人理解:not defined可以翻譯為未定義的,上面代碼中的a沒有被定義,所以會(huì)報(bào)錯(cuò)并提示not defined们颜。
2.undefined
一個(gè)定義了但未賦值的變量:
var a;
console.log(a);
//未報(bào)錯(cuò),提示: undefined
一個(gè)定義了但把值賦為undefined的變量:
var a = undefined;
console.log(a);
//未報(bào)錯(cuò)猎醇,提示: undefined
一個(gè)對象沒有賦值的屬性:
console.log(window.a);
//未報(bào)錯(cuò)窥突,提示: undefined
var a = [];
console.log(a.b);
//未報(bào)錯(cuò),提示: undefined
var a = {};
console.log(a.b);
//未報(bào)錯(cuò)硫嘶,提示:undefined
一個(gè)沒有返回值的函數(shù):
function a() {
}
console.log(a())
執(zhí)行結(jié)果:上面代碼執(zhí)行結(jié)果一樣:不會(huì)報(bào)錯(cuò)阻问,會(huì)打印出undefined,如圖:個(gè)人理解:undefined表示"缺少值"沦疾,就是此處應(yīng)該有一個(gè)值称近,但是還沒有定義贡蓖。典型用法是:
(1)變量被聲明了,但沒有賦值時(shí)煌茬,就等于undefined斥铺。
(2) 調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒有提供坛善,該參數(shù)等于undefined晾蜘。
(3)對象沒有賦值的屬性,該屬性的值為undefined眠屎。
(4)函數(shù)沒有返回值時(shí)剔交,默認(rèn)返回undefined。
注意:not defined 和 undefined 的typeof()的值都為"undefined",所以無法用typeof()來判斷這兩者改衩。
3.null
var a = document.getElementById('main');
console.log(a);
執(zhí)行結(jié)果:不會(huì)報(bào)錯(cuò)岖常,會(huì)打印出null,如圖:null表示"沒有對象"葫督,即該處不應(yīng)該有值竭鞍。典型用法是:
(1) 作為函數(shù)的參數(shù),表示該函數(shù)的參數(shù)不是對象橄镜。
(2) 作為對象原型鏈的終點(diǎn)偎快。
Object.getPrototypeOf(Object.prototype)
// null
個(gè)人理解:上面的代碼中如果實(shí)際上沒有id為main的元素,a則是null洽胶,所以null是真正不存在的東西晒夹。另外null是一個(gè)只有一個(gè)值的特殊類型。表示一個(gè)空對象引用姊氓,用typeof檢測返回是object丐怯。第二種的undefined是派生自null,所以有undefined==null翔横。
4.NaN
var a;
console.log(a*2);
執(zhí)行結(jié)果:不會(huì)報(bào)錯(cuò)读跷,會(huì)打印出NaN,如圖:個(gè)人理解:NaN是"Not a Number " 的簡寫棕孙,從字面上看為不是數(shù)字的意思舔亭,當(dāng)運(yùn)算無法返回正確的數(shù)值時(shí),就會(huì)返回NaN值蟀俊。也可以理解一下W3C給出的定義和用法:NaN 屬性是代表非數(shù)字值的特殊值。該屬性用于指示某個(gè)值不是數(shù)字订雾≈ぃ可以把 Number 對象設(shè)置為該值,來指示其不是數(shù)字值洼哎。
注意:null是一種特殊的object烫映;NaN是一種特殊的number沼本。