話不多說,直接先上結論:
null
是表示缺少的標識,指示變量未指向任何對象,轉為數值為0
undefined
表示 “缺少值”,即該處應該有值,但還沒有定義,轉為數值為NaN
//(1)null轉為數值為0 console.log(Number(null));//0 console.log(null+3);//3 console.log(null == null);//true console.log(null === null); //true console.log(isNaN(null));false //(2)undefined轉為數值為NaN console.log(Number(undefined));//NaN(not a number) console.log(3+undefined);//NaN console.log(isNaN(undefined));//true //(3)null和undefined比較 console.log(null == undefined); //true,存在隱式類型轉換 console.log(null === undefined);//false /* "==="表示全等,二者類型不同,所以為false */ console.log(typeof null);//object數據類型 console.log(typeof undefined);//undefined數據類型
null 應用場景:
(1)作為函數的參數,表示該函數的參數不是對象
(2)作為對象原型鏈的終點
console.log(Object.getPrototypeOf(Object.prototype));//null
undefined 應用場景:
(1)一個沒有被賦值的變量的類型是undefined
(2)調用函數時,應該提供的參數沒有提供,該參數為undefined
(3)對象沒有賦值的屬性,該屬性的值為undefined
(4)一個函數如果沒有使用return語句指定返回值,就會返回undefined
//(1)變量未賦值 let a console.log(a);//undefined //(2)函數參數未賦值 (function fn(x) { console.log(x); //undefined })() //(3)對象屬性未賦值 let obj = { name:'張三' } console.log(obj.name); console.log(obj.age);//undefined //(4)函數沒有返回值 function fn(){} var x = fn(); console.log(x);//undefined