ES2020 提供了一些幫助簡化邏輯判斷的語法糖,讓我們開始介紹吧
?.
的方式在訪問屬性時若是 null 或是 undefined 時不會拋出錯誤,而是返回 undefinedconst user = {
name: "Alice",
address: {
street: "123 JS Street"
}
};
console.log(user.address?.zipCode); // undefined
??
字符來判斷當左側為 null 或是 undefined 時才會回傳右側的值,與 ||
不同,||
是當左側值會被 javascript 視為 null 的任何值都會回傳右側值// || 判斷
const resultA1 = false || 'default'; // 'default'
const resultA2 = 0 || 'default'; // 'default'
const resultA3 = '' || 'default'; // 'default'
const resultA4 = null || 'default'; // 'default'
const resultA5 = undefined || 'default';// 'default'
// ?? 判斷
const resultB1 = false ?? 'default'; // false
const resultB2 = 0 ?? 'default'; // 0
const resultB3 = '' ?? 'default'; // ''
const resultB4 = null ?? 'default'; // 'default'
const resultB5 = undefined ?? 'default';// 'default'
const bigNumber = 1234567890123456789012345678901234567890n;
typeof bigNumber // 'bigint'
const promises = [
Promise.resolve(33),
new Promise(resolve => setTimeout(() => resolve(66), 0)),
Promise.reject(new Error('An error occurred'))
];
Promise.allSettled(promises).then(results => console.log(results));
// [
// { status: 'fulfilled', value: 33 },
// { status: 'fulfilled', value: 66 },
// { status: 'rejected', reason: Error: An error occurred }
// ]
console.log(globalThis); // 在瀏覽器中是 window,在 Node.js 中是 global
ES2021 主要是提供了些舊有的功能增強與簡化,讓我們開始吧
const str = 'I like apples. You like apples.';
const newStr = str.replaceAll('apples', 'bananas');
console.log(newStr); // 'I like bananas. You like bananas.'
const promises = [
Promise.reject('Error 1'),
Promise.resolve('Success'),
Promise.reject('Error 2')
];
Promise.any(promises).then(
result => console.log(result), // 輸出: 'Success'
error => console.log(error)
);
let a = 1;
a ||= 10; // 等同於 a = a || 10
console.log(a); // 1
let b = null;
b ??= 20; // 等同於 b = b ?? 20
console.log(b); // 20
let obj = { x: 5 };
obj.x &&= 2; // 等同於 obj.x = obj.x && 2
console.log(obj.x); // 2
const largeNumber = 1_000_000_000;
console.log(largeNumber); // 1000000000