ภาพรวม
เราต้องแสดงวิธีที่ถูกต้องในการตรวจสอบว่าคีย์เฉพาะมีอยู่ในอ็อบเจ็กต์หรือไม่ ก่อนจะไปถึงวิธีที่ถูกต้อง ให้เราดูวิธีที่ผิดก่อน
วิธีที่ 1: ตรวจสอบค่า undefined (วิธีผิด)
เนื่องจากลักษณะของ JavaScript เราอาจต้องการตรวจสอบการมีอยู่ของคีย์ในอ็อบเจ็กต์แบบนี้:
const obj = { name: 'Rahul' };
if(!obj['fName']){}
หรือ
if(obj['fName'] === undefined){}
ทั้งสองวิธีนี้ ผิด เพราะอาจมีคีย์ fName ที่ถูกตั้งค่าเป็น false หรือ undefined จริงๆ ฟังก์ชันควรคืนค่าว่าคีย์มีอยู่ แต่กลับคืนค่าว่าไม่มี
วิธีที่ 2: ใช้ตัวดำเนินการ in (วิธีถูกต้อง)
คีย์เวิร์ด in ที่มาพร้อม ES6 ตรวจสอบรายการใน iterable ดังนั้นเพื่อตรวจสอบการมีอยู่ของคีย์ เราสามารถทำได้ดังนี้:
('fName' in obj);
วิธีที่ 3: ใช้เมธอด hasOwnProperty() (วิธีถูกต้อง)
ใช้ Object.prototype.hasOwnProperty() เพื่อตรวจสอบว่าอ็อบเจ็กต์มีคีย์หรือไม่
obj.hasOwnProperty('fName');
ความแตกต่างระหว่างวิธีที่ 2 และ 3 คือ วิธีที่ 3 ตรวจสอบเฉพาะคุณสมบัติของอินสแตนซ์อ็อบเจ็กต์ที่เรียกใช้ ในขณะที่ in ตรวจสอบทั้งคุณสมบัติของอินสแตนซ์และคุณสมบัติที่สืบทอดมา (ถ้ามี)