JavaScript में undefined प्रॉपर्टी डिटेक्शन: पूरी गाइड

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

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

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

परिचय: आपका कोड "undefined" एरर से क्यों फेल हो रहा है?

\n\n

आप कोड लिख रहे हैं, सब कुछ लॉजिकल लग रहा है, लेकिन अचानक — TypeError: Cannot read properties of undefined। यह एरर जानी-पहचानी लगती है? यह शुरुआती लोगों के लिए एक सच्चा बुरा सपना है और Stack Overflow पर अक्सर देखी जाती है। "Detecting an undefined object property" टॉपिक पर हज़ारों व्यूज़ हैं, और यह कोई संयोग नहीं है।

\n\n

JavaScript में ऑब्जेक्ट्स सरप्राइज़ बॉक्स की तरह होते हैं। आप कभी निश्चित नहीं जान सकते कि अंदर आपकी ज़रूरत की प्रॉपर्टी है या नहीं, खासकर अगर ऑब्जेक्ट API, डेटाबेस या किसी दूसरे डेवलपर से आया हो। आज हम असली जासूस बनेंगे और undefined को पकड़ने के सभी तरीकों को समझेंगे। आप जानेंगे कि undefined और null में क्या अंतर है, कब typeof का उपयोग करें, और कब hasOwnProperty का, और कैसे आधुनिक JavaScript हमारे काम को आसान बनाता है।

\n\n

चलिए शुरू करते हैं! 🚀

\n\n

असल में undefined क्या है?

\n\n

undefined को पकड़ने से पहले, समझते हैं कि यह चीज़ क्या है। JavaScript में undefined एक प्रिमिटिव वैल्यू है जो ऑटोमैटिकली वेरिएबल को असाइन हो जाती है जब उसे कोई वैल्यू नहीं दी जाती। लेकिन ऑब्जेक्ट्स के साथ यह थोड़ा पेचीदा है।

\n\n

किसी ऑब्जेक्ट की प्रॉपर्टी दो मामलों में undefined हो सकती है:

\n
    \n
  • प्रॉपर्टी मौजूद है, लेकिन उसकी वैल्यू स्पष्ट रूप से undefined सेट की गई है।
  • \n
  • प्रॉपर्टी ऑब्जेक्ट में बिल्कुल मौजूद नहीं है।
  • \n
\n\n

और यहीं से मज़ा शुरू होता है। बाहरी कोड के लिए ये दोनों मामले एक जैसे दिखते हैं: जब आप किसी गैर-मौजूद प्रॉपर्टी को पढ़ने की कोशिश करते हैं, तो आपको undefined मिलता है। लेकिन आपके लॉजिक के लिए यह अंतर बहुत महत्वपूर्ण हो सकता है।

\n\n
const user = {\n    name: 'अन्ना',\n    age: undefined, // प्रॉपर्टी मौजूद है, लेकिन वैल्यू undefined है\n    // city: घोषित ही नहीं किया गया\n};\n\nconsole.log(user.age);  // undefined\nconsole.log(user.city); // undefined
\n\n

दोनों कॉल undefined लौटाएंगी, लेकिन पहला इसलिए क्योंकि ऐसा सेट किया गया है, दूसरा इसलिए क्योंकि प्रॉपर्टी मौजूद ही नहीं है। फर्क कैसे करें? आगे पढ़ें।

\n\n

तरीका 1: typeof ऑपरेटर — पुराना और भरोसेमंद तरीका

\n\n

प्रॉपर्टी चेक करने का सबसे आसान और सुरक्षित तरीका typeof का उपयोग करना है। यह ऑपरेटर कभी एरर नहीं फेंकता, भले ही आप किसी गैर-मौजूद प्रॉपर्टी को एक्सेस कर रहे हों।

\n\n
const book = {\n    title: 'गॉड ऑफ स्मॉल थिंग्स',\n    author: 'अरुंधति रॉय'\n};\n\nif (typeof book.year !== 'undefined') {\n    console.log('प्रकाशन वर्ष:', book.year);\n} else {\n    console.log('year प्रॉपर्टी नहीं मिली');\n}\n// आउटपुट: year प्रॉपर्टी नहीं मिली
\n\n

फायदे: सुरक्षित, सभी ब्राउज़रों में काम करता है, किसी अतिरिक्त मेथड की ज़रूरत नहीं।

\n

नुकसान: यह उस स्थिति में अंतर नहीं करता जब प्रॉपर्टी मौजूद हो लेकिन undefined के बराबर हो। अगर book.year = undefined है, तो typeof फिर भी 'undefined' दिखाएगा।

\n\n

typeof का उपयोग कब करें?

\n

त्वरित जांच के लिए आदर्श जब आपको सिर्फ एरर से बचना हो और "प्रॉपर्टी मौजूद है लेकिन undefined है" और "प्रॉपर्टी मौजूद नहीं है" के बीच का सूक्ष्म अंतर महत्वपूर्ण न हो। ग्लोबल वेरिएबल्स के लिए विशेष रूप से उपयोगी।

\n\n

तरीका 2: in ऑपरेटर — अस्तित्व का डिटेक्टर

\n\n

in ऑपरेटर जांचता है कि प्रॉपर्टी ऑब्जेक्ट में मौजूद है या नहीं, जिसमें इनहेरिटेड प्रॉपर्टीज़ भी शामिल हैं। यह true या false लौटाता है, इस पर निर्भर करता है कि प्रॉपर्टी प्रोटोटाइप चेन में है या नहीं।

\n\n
const car = {\n    brand: 'Tesla',\n    model: 'Model 3'\n};\n\nconsole.log('brand' in car); // true\nconsole.log('year' in car);  // false\nconsole.log('toString' in car); // true (Object.prototype से इनहेरिटेड)
\n\n

ध्यान दें: in true लौटाएगा भले ही प्रॉपर्टी undefined के बराबर हो:

\n\n
const config = {\n    debug: undefined\n};\n\nconsole.log('debug' in config); // true — प्रॉपर्टी मौजूद है                

ब्लॉग

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