JavaScript 可選串連(Optional Chaining)是現代 JavaScript 的一個強大特性,它讓我們更好的處理可能為 null
或 undefined
的值,同時減少冗長的條件判斷。這個功能在處理各種情境中非常實用,包括處理 API 請求、物件屬性存取以及函數返回值等等。可選串連運算子使用問號 ?
表示。
使用傳統方式處理可能為 null
或 undefined
的情況:
const data: unknown = fetchData();
if (data !== null && data !== undefined) {
console.log(data);
}
使用可選串連:
const data: unknown = fetchData();
console.log(data?.property);
使用可選串連非常簡單。只需在可能為 null
或 undefined
的值之後加上 ?
,就可以安全地訪問其屬性或調用其方法。這樣可以減少不必要的錯誤,提高代碼的可讀性。
使用傳統方式處理可能為 null
或 undefined
的情況:
const user: unknown = {
name: '肉鬆',
address: {
street: '某條街',
city: '某縣市',
},
};
const city = user.address ? user.address.city : 'Unknown';
console.log(city); // 如果 user.address 存在,輸出城市名稱;否則輸出 'Unknown'
使用可選串連:
const user: unknown = {
name: '肉鬆',
address: {
street: '某條街',
city: '某縣市',
},
};
const city = user.address?.city ?? 'Unknown';
console.log(city); // 如果 user.address 存在,輸出城市名稱;否則輸出 'Unknown'
可選串連不僅限於屬性存取,還可以應用於函數調用、陣列存取等多種情境。這種語法能夠幫助你簡化代碼並減少錯誤。
function calculateTotal(
price: number,
taxRate: { value: number } | undefined | null
): number {
return price * (1 + (taxRate?.value || 0));
}
const total: number = calculateTotal(30, { value: 0.1 });
console.log(total);
// 如果 taxRate 的 value 存在,返回 value 的值,否則返回 0
const ary: number[] = [1, 2, 3];
const index: number = 5;
const data: string = ary[index]?.toString() ?? 'Unknown';
console.log(data); // 如果 data[index] 存在,輸出該數字並轉成字串,否則輸出 Unknown
?
表示,允許我們安全存取可能不存在的屬性或方法,而不會引發錯誤。null
或 undefined
的值。