2.1 變數是引用
在 JavaScript 中,變數表示的是對物件的引用,而不是變數本身。這表示當你在 JavaScript 中創建變數時,實際上只是建立了一個指向記憶體中某個物件的引用。
語言的這個特性對於處理變數時具有重要的影響,特別是在將物件傳遞給函式或將它們分配給其他變數時。
當你創建變數並給它賦值時,JavaScript 將為該值在記憶體中分配一個物件,並讓變數成為該物件的引用。如果你將一個變數賦值給另一個變數,新的變數將會引用與原始變數相同的物件。這表示如果對一個變數中的物件進行修改(前提是該物件是可變的),改動將會影響到兩個變數。
範例:
let a = [1, 2, 3];
let b = a;
b.push(4);
console.log(a); // 顯示: [1, 2, 3, 4]
我們往變數 b
中加入了數字 4,但這個數字也被增加到了變數 a
的列表中,因為兩個變數實際上都只是指向列表物件 [1, 2, 3]
的引用。
2.2 undefined 類型
在 JavaScript 中有兩個特殊的數據類型:null
和 undefined
。這兩類型因為非常相似,經常讓開發者感到困惑,但它們的用途不同,適用於不同的場景。讓我們深入了解一下。
undefined 類型
undefined
類型表示的是尚未初始化的變數的值。當訪問物件中不存在的屬性或不存在的數組元素時,也會返回這個值。
範例
1. 尚未初始化的變數:
let x;
console.log(x); // undefined
2. 不存在的物件屬性:
let obj = {};
console.log(obj.property); // undefined
3. 不存在的數組元素:
let array = [1, 2, 3];
console.log(array[5]); // undefined
4. 函式缺少參數:
function myFunction(a, b) {
console.log(b); // undefined,如果呼叫 myFunction(1)
}
myFunction(1);
undefined 的特性:
undefined
是一個數據類型和一個值typeof undefined
返回undefined
2.3 null 類型
null
類型表示的是一個有意為之的空值。這種值通常用於初始化變數,表示該變數將來會被賦值為物件,或者用於清空變數的值。
範例
1. 初始化變數:
let obj = null;
console.log(obj); // null
2. 清空變數的值:
let user = { name: "Alice" };
user = null; // user 現在不再指向任何物件
null 的特性:
null
是表示空值的值typeof null
返回object
,這是一個已知的 JavaScript 錯誤(事實上,null
並不是物件)
2.4 比較 null 和 undefined
儘管 null
和 undefined
都可以用來表示值的缺失,但它們在用途和使用情境上是不同的。
屬性 | null | undefined |
---|---|---|
類型 | 原始類型 (Primitive) | 原始類型 (Primitive) |
用途 | 有意為之的空值 | 尚未初始化的變數 |
使用情境 | 初始化變數,清空值 | 不存在的屬性、數組元素 |
預設值 | 無 | 有(未初始化的變數、函式參數) |
使用範例
1. 初始化為物件或數組:
let myObject = null;
let myArray = null;
2. 檢查值:
let value;
if (value === undefined) {
console.log("變數尚未初始化。");
}
let result = null;
if (result === null) {
console.log("值缺失。");
}
3. 清空值:
let person = { name: "Alice" };
person = null; // 現在 person 不再指向任何物件
4. 檢查屬性的存在:
let obj = {};
if (obj.property === undefined) {
console.log("屬性不存在。");
}
理解 JavaScript 中 null
和 undefined
的區別,對於正確管理值和避免程式中的錯誤非常重要。
undefined
通常用來表示尚未初始化的變數或缺失的屬性,而 null
是用來明確表示值的缺失。
正確使用這些特殊類型的數據可以讓程式碼更加清晰和可預測。
GO TO FULL VERSION