ข้ามไปเนื้อหาหลัก

Nullish Coalescing ?? — ต่างจาก || ตรงไหน

?? คืนค่าขวาก็ต่อเมื่อค่าซ้ายเป็น null หรือ undefined เท่านั้น ต่างจาก || ที่คืนค่าขวาเมื่อค่าซ้ายเป็น falsy (รวม 0, '', false)

// ปัญหากับ ||
const count = userInput || 10;  // ถ้า userInput = 0 → count = 10 (ผิด!)
const label = text || 'default';// ถ้า text = '' → label = 'default' (อาจไม่ต้องการ)

// ?? แก้ปัญหาได้
const count = userInput ?? 10;  // ถ้า userInput = 0 → count = 0 ✓
const label = text ?? 'default';// ถ้า text = '' → label = '' ✓

Nullish assignment ??=:

// กำหนดค่าก็ต่อเมื่อตัวแปรเป็น null/undefined
config.timeout ??= 5000;
// เทียบเท่า: if (config.timeout == null) config.timeout = 5000;

Optional chaining + nullish coalescing:

const city = user?.address?.city ?? 'Unknown';
// ถ้า user หรือ address เป็น null/undefined → 'Unknown'
// ถ้า city = '' → '' (คงเดิม ไม่ fallback)

ใช้ ?? เมื่อ 0, '', false เป็นค่าที่ valid ในบริบทนั้น