जावास्क्रिप्ट में क्या कोई ऑब्जेक्ट ऐरे है, यह जांचने के 3 सर्वश्रेष्ठ तरीके

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

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

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

जावास्क्रिप्ट में क्या कोई ऑब्जेक्ट ऐरे है, यह जांचने का पूरा गाइड

\n\n

क्या आपने कभी सोचा है: "लगता है ऐरे भेजा था, लेकिन कोड एरर दे रहा है"? यह एक जानी-पहचानी स्थिति है। जावास्क्रिप्ट में, ऐरे ऑब्जेक्ट होते हैं, और साधारण typeof जांच यहाँ काम नहीं करेगी। आज हम तीन मुख्य तरीकों पर चर्चा करेंगे, जिनसे पता चलता है कि कोई ऑब्जेक्ट ऐरे है या नहीं, और यह पता लगाएंगे कि वास्तविक प्रोजेक्ट्स में किसका उपयोग करना चाहिए।

\n\n

typeof क्यों उपयुक्त नहीं है?

\n\n

गहराई में जाने से पहले, आइए समझते हैं कि शुरुआती लोग अक्सर इस जगह पर क्यों फंस जाते हैं। जावास्क्रिप्ट में, ऐरे ऑब्जेक्ट का एक विशेष मामला है। इसलिए, किसी ऐरे पर typeof ऑपरेटर "object" लौटाएगा, न कि "array"। इसे स्वयं आज़माएं:

\n\n
const arr = [1, 2, 3];\nconsole.log(typeof arr); // "object" — बेकार
\n\n

इसके अलावा, typeof null === "object" — यह भाषा का एक जाना-माना बग है, जिसे अब ठीक नहीं किया जाएगा। इसलिए, यदि आप उपयोगकर्ता या API से डेटा जांच रहे हैं, तो typeof पर भरोसा नहीं किया जा सकता। अधिक विश्वसनीय तरीकों की आवश्यकता है।

\n\n

विधि 1: Array.isArray() — आधुनिक मानक

\n\n

ES5 (2009) से शुरू करके, जावास्क्रिप्ट में एक अंतर्निहित विधि Array.isArray() आई। यह जांचने का सबसे सही और सरल तरीका है कि कोई ऑब्जेक्ट ऐरे है या नहीं।

\n\n
const arr = [10, 20, 30];\nconst notArr = { length: 3, 0: 'a', 1: 'b', 2: 'c' };\n\nconsole.log(Array.isArray(arr));    // true\nconsole.log(Array.isArray(notArr)); // false\nconsole.log(Array.isArray('hello')); // false\nconsole.log(Array.isArray(null));    // false
\n\n

यह सबसे अच्छा विकल्प क्यों है? क्योंकि Array.isArray() बहु-आयामी परिदृश्यों में भी सही ढंग से काम करता है: यदि ऐरे किसी दूसरे iframe या फ्रेम से आया है, तो instanceof विफल हो सकता है, लेकिन Array.isArray() नहीं होता। यह ऑब्जेक्ट के आंतरिक प्रकार [[Class]] की जांच करता है, न कि प्रोटोटाइप श्रृंखला की।

\n\n

ब्राउज़र समर्थन

\n

यह विधि Internet Explorer 9+ सहित सभी आधुनिक ब्राउज़रों द्वारा समर्थित है। यदि आपको बहुत पुराने ब्राउज़रों (IE 8 और उससे नीचे) का समर्थन करना है, तो पॉलीफिल या तीसरी विधि का उपयोग करें।

\n\n

विधि 2: instanceof Array — क्लासिक तरीका

\n\n

instanceof ऑपरेटर जांचता है कि ऑब्जेक्ट की प्रोटोटाइप श्रृंखला में Array.prototype प्रोटोटाइप मौजूद है या नहीं। यह जटिल लगता है, लेकिन व्यवहार में यह इस तरह काम करता है:

\n\n
const arr = [1, 2, 3];\nconsole.log(arr instanceof Array); // true\n\nconst obj = { a: 1 };\nconsole.log(obj instanceof Array); // false\n\n// लेकिन यहाँ एक आश्चर्य है:\nconst iframeArr = new iframe.contentWindow.Array(1, 2, 3);\nconsole.log(iframeArr instanceof Array); // false! (यदि ऐरे दूसरे फ्रेम से है)
\n\n

यहाँ समस्या यह है: यदि आपके पेज पर कई iframe हैं या आप Web Workers के साथ काम कर रहे हैं, तो विभिन्न वैश्विक संदर्भों के ऐरे के अलग-अलग प्रोटोटाइप होते हैं। instanceof इस पर ध्यान नहीं देता और एक वास्तविक ऐरे के लिए false लौटा सकता है। इसलिए, आधुनिक विकास में ऐरे की जांच के लिए instanceof का उपयोग न करना बेहतर है।

\n\n

विधि 3: Object.prototype.toString.call() — सार्वभौमिक समाधान

\n\n

इस विधि का उपयोग Array.isArray() के आने से पहले किया जाता था। यह आज भी प्रासंगिक है यदि आपको पॉलीफिल लिखना है या ऐसे वातावरण में काम करना है जहाँ Array.isArray उपलब्ध नहीं है।

\n\n
function isArray(obj) {\n  return Object.prototype.toString.call(obj) === '[object Array]';\n}\n\nconsole.log(isArray([1, 2]));      // true\nconsole.log(isArray({ a: 1 }));    // false\nconsole.log(isArray('string'));    // false\nconsole.log(isArray(null));        // false
\n\n

यह कैसे काम करता है? Object.prototype ऑब्जेक्ट की toString विधि [object Type] प्रारूप में एक स्ट्रिंग लौटाती है। ऐरे के लिए, यह हमेशा [object Array] होता है। यह विधि iframe की समस्या को दूर करती है, क्योंकि यह आंतरिक प्रकार की जांच करती है।

ब्लॉग

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