Optional chaining คืออะไร ? (เครื่องหมาย คำถาม และ จุด) เป็น operator ที่จะช่วยทำการเช็ค object ที่เราต้องการอ่าน ว่ามีค่าหรือไม่มี ถ้าไม่มีก็จะ return เป็น undefined ให้เราแทนที่จะ ERROR สามารถใช้กับ Param, Array, Function ได้หลากหลายแบบ เช่น obj.val?.prop
obj.val?.[expr]
obj.arr?.[index]
obj.func?.(args) ตามตัวอย่าง ไม่สามารถใช้ user.town.street เพราะว่า user.town เป็น undefined จึงใช้ ?. มาคั่นเพื่อให้บอกว่า street มีค่าหรือไม่