ๅฏ้ธไธฒ้ฃ
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itโs been available across browsers since โจ2020ๅนด7ๆโฉ.
ๅฏ้ธไธฒ้ฃ้็ฎๅญ ?.
ๅ
่จฑ้ฒ่กๆทฑๅฑคๆฌก็็ฉไปถๅผๅญๅ๏ผ่็ก้้้ๆ็ขบ็็ฉไปถๅผไธฒ้ฃ้ฉ่ญใ?.
้็ฎๅญ็ๆไฝ่ .
ๅฑฌๆงๅญๅ้็ฎๅญ็ธไผผ๏ผๅพ่
ๆๅจๅ็
งๅฐ nullish (null
or undefined
) ็ๅผๆๅบ็พ้ฏ่ชค๏ผ่ๅ่
ๅฏ้ธไธฒ้ฃๅๅๅณ undefined
ใ ็ถ้่ฆๅญๅไธๅๅฝๆธ๏ผ่้ๅฝๆธไธฆไธๅญๅจๆ๏ผๅๆๅๅณ undefined
ใ
็ถๆๆฉๆๅญๅจๅ็ งไธๅญๅจ็ๆๅ๏ผๅฏ้ธไธฒ้ฃๅฏไปฅๆไพๆด็ฐก็ญ็่กจ่ฟฐๅผไพ้ฒ่กไธฒ้ฃๆง็ๅฑฌๆงๅญๅใ้ๆๅฉๆผๅจ็กๆณไฟ่ญ็ฉไปถๅฑฌๆง็บๅฟ ่ฆๅญๅจ็็ๆณไธ๏ผ้ฒ่ก็ฉไปถๅ งๅฎน็ๆข็ดขใ
ๅ่ฉฆไธไธ
const adventurer = {
name: "Alice",
cat: {
name: "Dinah",
},
};
const dogName = adventurer.dog?.name;
console.log(dogName);
// Expected output: undefined
console.log(adventurer.someNonExistentMethod?.());
// Expected output: undefined
่ชๆณ
obj?.prop obj?.[expr] arr?.[index] func?.(args)
ๆ่ฟฐ
็ถไธฒ้ฃ็ฉไปถ่ฃก้ข็ๅ็
งๆๆนๆณๅฏ่ฝๆฏundefined
ๆ null
ๆ๏ผๅฏ้ธไธฒ้ฃ้็ฎๅญๆไพ็ฐกๅฎ็ๆนๆณๅปๅญๅ้ไบไธฒ้ฃ็ฉไปถไธ็ๅผใ
่ไพไพ่ชช๏ผ็ถไธๅ็ฉไปถ obj
ๆฏๅทข็็ตๆงๆ๏ผๅจๆฒๆๅฏ้ธไธฒ้ฃไนไธ๏ผ่ฆๅปๆฅๆพไธๆทฑๅฑค็ๅฑฌๆงๅผ้่ฆ้ฉ่ญๆฏๅฑค้็ๅ็
ง้ฃ็ต๏ผ
let nestedProp = obj.first && obj.first.second;
obj.first
็ๅผ้่ฆๅ
็ขบๅฎไธๆฏ null
ๅผ๏ผๅไธฆ้ undefined
๏ผ๏ผๆ่ฝๅญๅ obj.first.second
็ๅผใ้ๆ่ฝ้ฟๅ
ๅจๅญๅๅผๆ๏ผๅ ็บ็ดๆฅไฝฟ็จ obj.first.second
่ๆฒๆๆธฌ่ฉฆ obj.first
ไนไธๅธถไพ็้ฏ่ชคใ
็ถไฝฟ็จไบๅฏ้ธไธฒ้ฃ้็ฎๅญ๏ผ?.
๏ผ๏ผไฝ ไธๅ้่ฆๆ็ขบๅฐ้ฒ่กๆธฌๆธฌ๏ผไธฆ่ฝๅจๅบๆผ obj.first
็็ๆ
ไธ็ดๆฅๅๅณ๏ผๅฟฝ็ฅๅญๅ obj.first.second
็ๅไฝ๏ผ
let nestedProp = obj.first?.second;
ๅพๅชๆฏ .
ๆน็จไฝ ?.
้็ฎๅญ๏ผJavaScript ๆ็ฅ้ๅจๅญๅ obj.first.second
ไนๅ๏ผ้่ฆ้ๆฅๅฐๆชขๆฅไธฆ็ขบไฟ obj.first
ไธฆไธๆฏ null
ๆ undefined
ใ็ถ obj.first
ๆฏ null
ๆ undefined
๏ผ้็ฎๅผๆๅ็ญ่ทฏไธๆจฃ่ทณ้ๆดๅไธฒ้ฃๅญๅๅผ๏ผ่ๅๅณ undefined
ใ
้ๆฏ่ทไปฅไธๆฏ็ธ็ญๅ็๏ผไฝๆฏๅฏฆ้ไธๆฏไธๆๅปบ็ซ่จๆ่ฎๆธ๏ผ
let temp = obj.first;
let nestedProp = temp === null || temp === undefined ? undefined : temp.second;
ๅฏ้ธไธฒ้ฃๅผๅซๅฝๆธ
ไฝ ๅฏไปฅไฝฟ็จๅฏ้ธไธฒ้ฃไพๅ่ฉฆๅผๅซไธๅๆ่จฑๆฒๆๅญๅจ็ๆนๆณใ้ๅฏ่ฝๆๅฉๆผ๏ผ่ไพไพ่ชช๏ผไฝฟ็จไธไบๆช่ฝๆไพๆๅ็ API ๏ผ้ๅฏ่ฝๅ ็บ้ๆ็ๆ็จๆๆฏไฝฟ็จ่ ็่ฃ็ฝฎๆช่ฝๆฏๆดๆ็จฎๅ่ฝใ
็ถ้่ฆไฝฟ็จ็ๆนๆณไธฆไธๅญๅจๆ๏ผ้้ๅฏ้ธไธฒ้ฃๅป้ฒ่กๅผๅซๅฐไธๆๆๅบ้ฏ่ชค๏ผๅ่ไปฃไน็ๆฏๅๅณ undefined
๏ผ
let result = someInterface.customMethod?.();
ๅ่จป๏ผ
ๅๅฆ็ฉไปถๆๅๆจฃ็ๅฑฌๆงๅ็จฑ๏ผ่ไธๆฏไธๅๆนๆณ๏ผไฝฟ็จ ?.
ๅฐๆๆๅบ TypeError
้ฏ่ชค๏ผx.y ไธๆฏไธๅๅฝๆธ
๏ผใ
่็ๅๅผๅฝๅผๆไบไปถ่็ๅจ
ๅฆๆไฝ ไฝฟ็จๅๅผๅฝๅผ๏ผๆๆฏ้้่งฃๆงไพๆทๅ็ฉไปถไธญ็ๆนๆณ๏ผไฝ ๅฏ่ฝๆๅ ็บ้ไบๆนๆณๆฒๆๅญๅจ๏ผ่็กๆณ้ฒ่กๅผๅซ๏ผ้ค้ไฝ ไบๅ
้ฉ่ญๅ
ถๅญๅจๆงใๆไปฅ๏ผไฝ ๅฏไปฅๅฉ็จ ?.
ไพ้ฟๅ
้ๆจฃ็ๆธฌ่ฉฆ๏ผ
// ๅจ ES2019 ไธๆฐๅฏซ
function doSomething(onContent, onError) {
try {
// ... ๅฐ่ณๆ้ฒ่กไธไบ่็
} catch (err) {
if (onError) {
// ๆธฌ่ฉฆ onError ๆฏๅฆ็็ๅญๅจ
onError(err.message);
}
}
}
// ไฝฟ็จๅฏ้ธไธฒ้ฃ้ฒ่กๅฝๅผๅผๅซ
function doSomething(onContent, onError) {
try {
// ... ๅฐ่ณๆ้ฒ่กไธไบ่็
} catch (err) {
onError?.(err.message); // ๅฐฑ็ฎ onError ๆฏ undefined ไนไธๆๆๅบ้ฏ่ชค
}
}
ๅฏ้ธไธฒ้ฃ่กจ่ฟฐๅผ
ไฝ ไนๅฏไปฅๅจๆนๆฌ่ๅฑฌๆงๅญๅ่กจ้ๅผไธญไฝฟ็จๅฏ้ธไธฒ้ฃ๏ผ
let nestedProp = obj?.["prop" + "Name"];
็ฉ้ฃ้ ็ฎ็ๅฏ้ธไธฒ้ฃ
let arrayItem = arr?.[42];
็ฏไพ
ๅบๆฌ็ฏไพ
้ๅ็ฏไพๆๆพๅบ Map ็ฉไปถไธญไธๅ้ต็บ bar
ๆๅก็ name
ๅฑฌๆงๅผ๏ผไฝไบๅฏฆไธไธฆๆฒๆ็ธ้ๆๅกใๆไปฅ็ตๆ็บ undefined
ใ
let myMap = new Map();
myMap.set("foo", { name: "baz", desc: "inga" });
let nameBar = myMap.get("bar")?.name;
็ญ่ทฏๅผ้็ฎ
็ถๅฏ้ธไธฒ้ฃๆฅไธ่กจ่ฟฐๅผๆ๏ผๅฆๆๅทฆ้็้็ฎๆธๅผๆฏ null
ๆ undefined
๏ผ่กจ่ฟฐๅผๅไธๆ่ขซ้็ฎใ่ไพไพ่ชช๏ผ
let potentiallyNullObj = null;
let x = 0;
let prop = potentiallyNullObj?.[x++];
console.log(x); // ๅ ็บ x ๆฒๆ้ๅข๏ผๆไปฅ็บ 0
ไธฒๆฅๅคๅๅฏ้ธไธฒ้ฃ
ๅจๅทข็็ตๆงไธญๅฏไปฅไฝฟ็จๅคๆฌก็ๅฏ้ธไธฒ้ฃ๏ผ
let customer = {
name: "Carl",
details: {
age: 82,
location: "Paradise Falls", // ่ฉณ็ดฐๅฐๅ address ไธฆไธ็ฅ้
},
};
let customerCity = customer.details?.address?.city;
// โฆ ๅๆจฃๅฐ๏ผไธฒๆฅๅคๅๅฏ้ธไธฒ้ฃไพๅผๅซๅฝๅผไนๆฏๆนๆ็
let duration = vacations.trip?.getTime?.();
ไฝฟ็จ็ฉบๅผๅไฝต้็ฎๅญ
ๅจๅฏ้ธไธฒ้ฃๅพๅฏไปฅไฝฟ็จ็ฉบๅผๅไฝต้็ฎๅญไพ็ทจ้ ้ ่จญๅผ๏ผๅฆๆ็กๆณๅจๅฑฌๆงไธฒ้ฃไธญๅๅพๅผ๏ผ
let customer = {
name: "Carl",
details: { age: 82 },
};
const customerCity = customer?.city ?? "Unknown city";
console.log(customerCity); // Unknown city
่ฆ็ฏ
Specification |
---|
ECMAScriptยฎ 2026 Language Specification # prod-OptionalExpression |
็่ฆฝๅจ็ธๅฎนๆง
Loadingโฆ