जावास्क्रिप्ट ऑब्जेक्ट खाली है या नहीं: 5 कारगर तरीके

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

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

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

"ऑब्जेक्ट खाली है या नहीं?" जावास्क्रिप्ट डेवलपर की सबसे बड़ी समस्या का समाधान

\n\n

सोचिए: आप एक ऐप बना रहे हैं, API से रिस्पॉन्स मिलता है, और आपको पता करना है कि डेटा आया भी या नहीं? या ऑब्जेक्ट खाली है और यूज़र को खाली स्क्रीन दिखाने का समय है? या फिर आप फॉर्म प्रोसेस कर रहे हैं और जाँचना चाहते हैं कि यूज़र ने कम से कम एक फील्ड भरा है? यह स्थिति हर जावास्क्रिप्ट डेवलपर को पता है।

\n\n

लगता है क्या मुश्किल है? if (obj === {}) — बस इतना ही? नहीं, ऐसा नहीं है। जावास्क्रिप्ट में दो ऑब्जेक्ट, भले ही उनमें बिल्कुल एक जैसा डेटा हो, कभी बराबर नहीं होंगे जब तक कि वे मेमोरी में एक ही ऑब्जेक्ट न हों। जावास्क्रिप्ट ऑब्जेक्ट खाली है या नहीं चेक करना एक ऐसी समस्या है जिसने Stack Overflow पर हज़ारों व्यूज़ बटोरे हैं और कई समाधानों को जन्म दिया है।

\n\n

इस आर्टिकल में हम 5 भरोसेमंद तरीके सीखेंगे यह पता लगाने के लिए कि ऑब्जेक्ट खाली है या नहीं। क्लासिक से लेकर आधुनिक, तेज़ से लेकर सुरक्षित तक। चलिए शुरू करते हैं!

\n\n

जावास्क्रिप्ट में 'खाली ऑब्जेक्ट' का क्या मतलब है?

\n\n

कोड में कूदने से पहले, शब्दों पर सहमत हो लेते हैं। जावास्क्रिप्ट में खाली ऑब्जेक्ट वह ऑब्जेक्ट है जिसके पास अपनी कोई भी एन्यूमरेबल प्रॉपर्टी नहीं है। यानी {} खाली है। लेकिन { name: "Rahul" } खाली नहीं है।

\n\n

एक महत्वपूर्ण बात: हर ऑब्जेक्ट का एक प्रोटोटाइप (Object.prototype) होता है, जिसका मतलब है कि उसके पास इनहेरिटेड प्रॉपर्टीज़ (जैसे toString, hasOwnProperty) होती हैं। हमें उनसे कोई मतलब नहीं है। हम सिर्फ वही चेक कर रहे हैं जो हमने खुद जोड़ा है।

\n\n

एक और अड़चन है null। अगर वेरिएबल null या undefined है, तो हम उस पर कोई मेथड भी कॉल नहीं कर सकते। इसलिए सबसे पहले हमेशा जाँचें कि ऑब्जेक्ट मौजूद है।

\n\n

तरीका 1: Object.keys() — सबसे भरोसेमंद तरीका

\n\n

आधुनिक जावास्क्रिप्ट में सबसे लोकप्रिय और अनुशंसित तरीका। Object.keys() मेथड ऑब्जेक्ट की अपनी एन्यूमरेबल प्रॉपर्टीज़ की एक ऐरे लौटाता है। अगर ऐरे खाली है, तो ऑब्जेक्ट खाली है।

\n\n
function isEmpty(obj) {\n    return Object.keys(obj).length === 0;\n}\n\n// उपयोग के उदाहरण\nconsole.log(isEmpty({}));           // true\nconsole.log(isEmpty({a: 1}));       // false\nconsole.log(isEmpty({name: 'Ravi', age: 25})); // false
\n\n

यह क्यों काम करता है? Object.keys() इनहेरिटेड प्रॉपर्टीज़ को नज़रअंदाज़ करता है और सिर्फ वही लौटाता है जो ऑब्जेक्ट की अपनी है। Object.keys() से ऑब्जेक्ट खाली है या नहीं चेक करना साफ, पढ़ने में आसान और तेज़ कोड है।

\n\n

ज़रूरी बात: यह मेथड यह नहीं जाँचता कि पास किया गया वैल्यू ऑब्जेक्ट है या नहीं। अगर आप स्ट्रिंग या नंबर पास करेंगे, तो यह खाली ऐरे लौटाएगा, और हम गलती से सोचेंगे कि ऑब्जेक्ट खाली है। इसलिए सुरक्षा के लिए टाइप चेक जोड़ें:

\n\n
function isEmptySafe(obj) {\n    return obj && typeof obj === 'object' && Object.keys(obj).length === 0;\n}\n\nconsole.log(isEmptySafe('नमस्ते')); // false (स्ट्रिंग ऑब्जेक्ट नहीं है)\nconsole.log(isEmptySafe(null));    // false\nconsole.log(isEmptySafe({}));      // true
\n\n

तरीका 2: JSON.stringify() — अनोखा लेकिन कारगर

\n\n

कभी-कभी प्रोग्रामर मज़ाक में इस तरीके को 'पैच' कहते हैं, लेकिन यह काम करता है। आइडिया सरल है: ऑब्जेक्ट को JSON स्ट्रिंग में बदलें और उसकी तुलना '{}' से करें।

\n\n
function isEmptyJSON(obj) {\n    return JSON.stringify(obj) === '{}';\n}\n\nconsole.log(isEmptyJSON({}));           // true\nconsole.log(isEmptyJSON({key: 'val'})); // false
\n\n

यह तरीका परफेक्ट क्यों नहीं है? पहला, JSON.stringify() फंक्शन, undefined और सिंबल को नज़रअंदाज़ करता है। अगर ऑब्जेक्ट में undefined वैल्यू वाली कोई प्रॉपर्टी है, तो वह सीरियलाइज़ेशन के दौरान गायब हो जाएगी, और ऑब्जेक्ट खाली मान लिया जाएगा, जबकि उसके पास एक की है।

\n\n
const obj = { a: undefined };\nconsole.log(isEmptyJSON(obj)); // true — जबकि false होना चाहिए!
\n\n

दूसरा, यह तरीका धीमा है क्योंकि इसमें पूरे ऑब्जेक्ट को स्ट्रिंग में बदलना पड़ता है। बड़े ऑब्जेक्ट के लिए यह परफॉरमेंस को प्रभावित कर सकता है।

ब्लॉग

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