在 JavaScript 中, undefined 和 null 是兩個特殊的值,用於表示缺失或空值。 undefined 是一個表示未定義或未賦值的原始值。它在以下情況下使用: 1. 變數聲明瞭但未初始化時,預設為 undefined 。 let x; console.log(x); // und ...
在 JavaScript 中, undefined 和 null 是兩個特殊的值,用於表示缺失或空值。
undefined 是一個表示未定義或未賦值的原始值。它在以下情況下使用:
1. 變數聲明瞭但未初始化時,預設為 undefined 。
let x; console.log(x); // undefined
2. 訪問對象屬性或數組元素時,如果該屬性或元素不存在,則返回 undefined 。
let obj = { name: "John", age: 30 }; console.log(obj.address); // undefined let arr = [1, 2, 3]; console.log(arr[3]); // undefined
3. 函數沒有明確返回值時,預設返回 undefined 。
function foo() { // 沒有明確返回值 } console.log(foo()); //undefined
相比之下, null 是一個表示空值或沒有對象引用的特殊值。它通常由程式員顯式賦予變數或屬性,表示該值為空。例如:
let x = null; console.log(x); // null
null 主要用於以下情況:
1. 初始化一個變數,以便稍後將其設置為對象。
let obj = null; // 初始化為 null obj = { name: "John", age: 30 }; // 後續設置為對象
2. 表示函數的參數不具有對象引用。
function foo(arg) { if (arg === null) { console.log("參數為空"); } else { console.log("參數不為空"); } } foo(null); // 參數為空 foo("Hello"); // 參數不為空
需要註意的是, undefined 和 null 是不同的類型。 undefined 是一個類型為 undefined 的值,而 null 是一個類型為 object 的值。然而,在相等性比較( == 或 === )中,它們是相等的,因為它們都表示著相同的含義——空值。
console.log(undefined == null); // true console.log(undefined === null); // false
在編程中,通常使用 undefined 來表示未定義或未賦值的狀態,使用 null 來表示有意地將一個值設置為空。
當涉及到 undefined 和 null 的更多細節時,還有一些要註意的事項:
1. 類型檢查:
- 使用 typeof 操作符檢查 undefined 值時,會返回字元串 "undefined" 。
- 使用 typeof 操作符檢查 null 值時,會返回字元串 "object" 。這是一個歷史遺留問題, null 被錯誤地標識為對象類型。
let x; console.log(typeof x); // "undefined" let y = null; console.log(typeof y); // "object"
2. 預設參數值:
- 當函數的參數沒有傳遞或傳遞的值為 undefined 時,可以使用預設參數值。
- 當函數的參數傳遞 null 值時,會將 null 視為有效值,而不會觸發預設參數值。
function foo(x = "default") { console.log(x); } foo(); // "default" foo(undefined); // "default" foo(null); // null
3. 安全導航操作符:
- 使用安全導航操作符( ?. )可以避免訪問對象屬性或調用方法時出現 undefined 或 null 的錯誤。如果屬性或方法不存在,則會返回 undefined 。
let obj = { name: "John", address: { city: "New York" } }; console.log(obj.address?.city); // "New York" console.log(obj.address?.zipCode); // undefined
4. 變數賦值:
- 在變數賦值時, undefined 被視為一個變數可以接收的有效值。
- 而 null 被視為一個特殊值,通常用於表示空或未定義的狀態。
let x = undefined; console.log(x); // undefined let y = null; console.log(y); // null