js中null和undefined的區別?這也是一個常見的js面試題
相同點
1,都是基本型別。
2,做判斷值都是false。
!!null === false // true
!!undefined === false // true
不同點
1,誕生時間null在前,undefined在後。因為js作者Brendan-Eich在創造js語言時,直接抄了java很多東西。也包括null,後期發現js中的null有缺陷,又創造了undefined。(《JavaScript高階程式設計》中有說,下面的不同點就包含null缺點)
2,typeof 型別不同
typeof null; // 'object'
typeof undefined; // 'undefined'
3,Number() 轉數字也不同
Number(null); // 0
Number(undefined); // NaN (Not a Number,非數)是電腦科學中數值資料型別的一類值,表示未定義或不可表示的值。
4,前端開發中出現的時機不同
(1) null 觸發null的時機
// 舉例
// 獲取不存在的dom
document.getElementById("233") // null
// 獲取不存在的儲存
localStorage.getItem("233") // null
sessionStorage.getItem('233') // null
...
(2) 觸發undefined的時機
// 舉例(undefined觸發時機太多,簡單舉例)
// 宣告變數未使用
var test1; // undefined
// 宣告變數未使用
var test1; // undefined
// 物件中找不到該屬性
var obj ={};
obj.a; // undefined
...
5,函式引數有預設值時,當引數使用時預設引數 是否生效 效果不同。
function demo(data = '233'){
console.log('_______'+data);
};
demo(null); // _______null
demo(undefined); // _______233
總結
null本質是一個表示"無值"的物件,算是一個特殊值。
undefined是一個表示"還沒有定義"的原始型別。