जावास्क्रिप्ट ऑब्जेक्ट में कुंजी के अस्तित्व की जाँच: शुरुआती लोगों के लिए 3 तरीके

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावास्क्रिप्ट ऑब्जेक्ट में कुंजी के अस्तित्व की जाँच: शुरुआती लोगों के लिए विश्लेषण

\n\n

क्या आपने कभी जावास्क्रिप्ट ऑब्जेक्ट से मान प्राप्त करने का प्रयास किया है, और जवाब में रहस्यमय undefined प्राप्त किया है? परिचित स्थिति है, है ना? खासकर जब आप API, कॉन्फ़िगरेशन या बस बड़ी संरचनाओं से डेटा के साथ काम करते हैं। आज हम एक बार और हमेशा के लिए समझ जाएंगे कि ऑब्जेक्ट में कुंजी मौजूद है या नहीं, इसकी सही जाँच कैसे करें। Stack Overflow पर यह सबसे लोकप्रिय प्रश्नों में से एक है - और यह अकारण नहीं है।

\n\n

कल्पना करें कि ऑब्जेक्ट दराज वाली एक अलमारी है। आप जानना चाहते हैं कि क्या इसमें "चाबियाँ" लिखा हुआ कोई दराज है। आप बस हैंडल खींच सकते हैं (और यदि दराज नहीं है तो त्रुटि प्राप्त कर सकते हैं), या पहले देख सकते हैं और सुनिश्चित कर सकते हैं। जावास्क्रिप्ट में हमारे पास ऐसा करने के तीन विश्वसनीय तरीके हैं। चलिए शुरू करते हैं!

\n\n

कुंजी की उपस्थिति की जाँच क्यों करें?

\n\n

मान लीजिए कि आप खरीदारी सूची के लिए एक एप्लिकेशन लिख रहे हैं। आपके पास एक cart ऑब्जेक्ट है, जिसमें मात्रा के साथ आइटम हो सकते हैं:

\n\n
const cart = {\n  apples: 3,\n  bananas: 5\n};\n\n// हम नाशपाती जोड़ना चाहते हैं, लेकिन नहीं जानते कि वे पहले से मौजूद हैं या नहीं\nfunction addItem(item, quantity) {\n  if (cart[item] !== undefined) {\n    cart[item] += quantity;\n  } else {\n    cart[item] = quantity;\n  }\n}
\n\n

यह कोड काम करेगा, लेकिन इसमें कमियाँ हैं। क्या होगा यदि कुंजी का मान 0 या null है? तब undefined की जाँच गलत परिणाम देगी। इसलिए आइए पेशेवर दृष्टिकोणों को समझें।

\n\n

विधि 1: in ऑपरेटर - सार्वभौमिक सैनिक

\n\n

in ऑपरेटर जाँचता है कि ऑब्जेक्ट में कोई प्रॉपर्टी मौजूद है या नहीं, जिसमें विरासत में मिली प्रॉपर्टी शामिल हैं। यह सबसे विश्वसनीय तरीका है जब आपको यह जानना हो कि कुंजी बिल्कुल मौजूद है या नहीं।

\n\n
const user = {\n  name: 'अन्ना',\n  age: 25,\n  isAdmin: false\n};\n\nconsole.log('name' in user);    // true\nconsole.log('age' in user);     // true\nconsole.log('salary' in user);  // false\nconsole.log('toString' in user); // true (Object से विरासत में मिला)
\n\n

लाभ: तब भी काम करता है जब मान null, undefined या false हो। प्रोटोटाइप श्रृंखला की जाँच करता है।

\n\n

नुकसान: यह विरासत में मिली प्रॉपर्टी ढूंढ सकता है जिनकी आपको आवश्यकता नहीं है। उदाहरण के लिए, toString या hasOwnProperty।

\n\n

अधिकांश मामलों के लिए, in एक आदर्श विकल्प है। खासकर जब आप सामान्य शब्दकोश-शैली ऑब्जेक्ट के साथ काम कर रहे हों।

\n\n

विधि 2: hasOwnProperty() - केवल अपनी कुंजियाँ

\n\n

यदि आपको केवल ऑब्जेक्ट की अपनी प्रॉपर्टी (विरासत में मिली नहीं) की जाँच करनी है, तो hasOwnProperty विधि का उपयोग करें। यह जावास्क्रिप्ट में सभी ऑब्जेक्ट की एक मानक विधि है।

\n\n
const book = {\n  title: 'डमीज़ के लिए जावास्क्रिप्ट',\n  pages: 300\n};\n\nconsole.log(book.hasOwnProperty('title'));   // true\nconsole.log(book.hasOwnProperty('pages'));   // true\nconsole.log(book.hasOwnProperty('toString')); // false (अपनी प्रॉपर्टी नहीं)\nconsole.log(book.hasOwnProperty('author'));   // false
\n\n

ध्यान दें: hasOwnProperty विरासत में मिली प्रॉपर्टी की जाँच नहीं करता है। यह इसे अपरिहार्य बनाता है जब आप क्लास या प्रोटोटाइप के साथ ऑब्जेक्ट बनाते हैं।

\n\n

लेकिन एक बारीक बात है! यदि आपका ऑब्जेक्ट Object.create(null) के साथ बनाया गया है, तो उसके पास hasOwnProperty विधि नहीं होगी। क्या करें? सुरक्षित कॉल का उपयोग करें:

\n\n
const dict = Object.create(null);\ndict.key1 = 'value1';\n\n// यह काम नहीं करेगा:\n// console.log(dict.hasOwnProperty('key1')); // TypeError\n\n// लेकिन यह करेगा:\nconsole.log(Object.prototype.hasOwnProperty.call(dict, 'key1')); // true
\n\n

आधुनिक सिंटैक्स Object.hasOwn() का उपयोग करने की अनुमति देता है - ES2022 में जोड़ी गई एक स्थिर विधि। यह इस समस्या को सुरुचिपूर्ण ढंग से हल करती है:

\n\n
console.log(Object.hasOwn(dict, 'key1')); // true
\n\n

मैं Obj का उपयोग करने की सलाह देता हूँ

ब्लॉग

पुस्तक अनुशंसाएँ