ตัวเลือกการ?.
ผูกมัดและการรวมกันเป็นศูนย์??
ตอนนี้คุณสามารถใช้?.
อินไลน์เพื่อทดสอบการมีอยู่ได้อย่างปลอดภัย เบราว์เซอร์สมัยใหม่ทั้งหมดรองรับ
??
สามารถใช้เพื่อตั้งค่าเริ่มต้นหากไม่ได้กำหนดหรือเป็นโมฆะ
aThing = possiblyNull ?? aThing
aThing = a?.b?.c ?? possiblyNullFallback ?? aThing
หากทรัพย์สินมีอยู่ให้?.
ดำเนินการตรวจสอบต่อไปหรือส่งกลับค่าที่ถูกต้อง ความล้มเหลวใด ๆ จะลัดวงจรและส่งคืนundefined
ทันที
const example = {a: ["first", {b:3}, false]}
example?.a // ["first", {b:3}, false]
example?.b // undefined
example?.a?.[0] // "first"
example?.a?.[1]?.a // undefined
example?.a?.[1]?.b // 3
domElement?.parentElement?.children?.[3]?.nextElementSibling
null?.() // undefined
validFunction?.() // result
(() => {return 1})?.() // 1
??
เพื่อให้แน่ใจว่าการกำหนดค่าเริ่มต้นคุณสามารถใช้ หากคุณจำเป็นต้องมีค่า truthy ||
แรกคุณสามารถใช้
example?.c ?? "c" // "c"
example?.c || "c" // "c"
example?.a?.[2] ?? 2 // false
example?.a?.[2] || 2 // 2
หากคุณไม่ได้ตรวจสอบเคสคุณสมบัติด้านซ้ายจะต้องมีอยู่ ถ้าไม่เช่นนั้นจะมีข้อยกเว้น
example?.First // undefined
example?.First.Second // Uncaught TypeError: Cannot read property 'Second' of undefined
?.
การสนับสนุนเบราว์เซอร์ - 78%, กรกฎาคม 2020
??
รองรับเบราว์เซอร์ - 78%
เอกสาร Mozilla
-
การกำหนดค่า nullish แบบลอจิคัลโซลูชัน 2020+
ผู้ประกอบการใหม่กำลังถูกเพิ่มเข้าไปในเบราว์เซอร์, ??=
, และ||=
&&=
พวกเขาไม่ได้ทำสิ่งที่คุณกำลังมองหา แต่อาจนำไปสู่ผลลัพธ์เดียวกันขึ้นอยู่กับจุดประสงค์ของรหัสของคุณ
หมายเหตุ: เหล่านี้ไม่ได้ทั่วไปในเบราว์เซอร์รุ่นประชาชนเลยแต่บาเบลควร transpile ดี จะอัปเดตเมื่อมีการเปลี่ยนแปลงความพร้อมให้บริการ
??=
ตรวจสอบว่าด้านซ้ายไม่ได้ถูกกำหนดหรือเป็นโมฆะการลัดวงจรถ้ากำหนดไว้แล้ว ถ้าไม่ด้านซ้ายจะถูกกำหนดค่าด้านขวา ||=
และ&&=
มีความคล้ายคลึง แต่ขึ้นอยู่กับ||
และ&&
ผู้ประกอบการ
ตัวอย่างพื้นฐาน
let a // undefined
let b = null
let c = false
a ??= true // true
b ??= true // true
c ??= true // false
ตัวอย่างวัตถุ / อาร์เรย์
let x = ["foo"]
let y = { foo: "fizz" }
x[0] ??= "bar" // "foo"
x[1] ??= "bar" // "bar"
y.foo ??= "buzz" // "fizz"
y.bar ??= "buzz" // "buzz"
x // Array [ "foo", "bar" ]
y // Object { foo: "fizz", bar: "buzz" }
รองรับบราวเซอร์กรกฎาคม 2563 - .03%
เอกสาร Mozilla
if( obj?.nested?.property?.value )
แทนที่จะเป็นif( obj && obj.nested && obj.nested.property && obj.nested.property.value )