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