在 JavaScript 中 ,null
是一個 keyword,當使用 typeof
運算子用console.log
去印出null
的型態時,會是字串 "object"。
console.log(typeof null);
也就是說 null
它代表著 沒有存在值 (the absence of a value) 的物件。
null
可以用在當變數的資料型別如 數字、字串或物件中沒有值的意思。在其他的程式語言中也有和 JavaScript 同樣沒有值的 null
或 nil
。
undefined
是 JavaScript 預先定義的全域變數,用來代表尚未定義的值,若宣告變數一開始的時候沒有直接指定值(const 除外),那麼它的型態就會是undefined
。
const 常數宣告一開始必須指定值給它,否則執行時就會出現錯誤訊息
SyntaxError: Missing initializer in const declaration
比如下方的幾個例子都會是 undefined
的情況
let a;
console.log(a); // undefined
console.log(typeof undefined); // undefined
console.log(print()); // 印出 123, undefined, undefined
// 除了 print() 執行的印出123之外,也會在後面印出兩次 undefined, 因為在呼叫 print 方法的時候,並沒有相對應的引數傳入作為參數給它,加上一開始我就沒有在print() 方法中指定回傳值(return value),所以它會回傳 undefined 代表沒有回傳值的意思。
function print(arg){
console.log(123); // 印出 123
console.log(arg); // 印出 undefined
}
當使用 相等性的運算子 ==
比較 null
跟 undefined
時,它會把兩者視為相同,因為兩者都是代表著falsy value,也是 布林值(Boolean) 判斷中的 false。
console.log(null == undefined); // ture
但在使用嚴格相等性運算子===
比較時,兩者就會不相同。
console.log(null === undefined); // false
事實上 null
與 undefined
,兩者代表的意義是不相同的,undefined
可以用來代表非預期的,或是錯誤的沒有值,而 null
則用來明確表示 預期中的沒有值。
當需要將值指定給變數或物件的特性,或是要傳值給 function(方法),多半是用 null
。
參考資料: