TLDR; सबसे अच्छा मैं के साथ आ सकते हैं यह है:
function arrayIndexExists(array, index){
if (typeof index !== 'number' && index === parseInt(index).toString()) {
index = parseInt(index);
} else {
return false;//to avoid checking typeof again
}
return typeof index === 'number' && index % 1===0 && index >= 0 && array.hasOwnKey(index);
}
अन्य जवाब के उदाहरण करीब हो और (शायद सबसे कुछ के लिए काम करेंगे (आपके उपयोग के मामले के आधार पर, वहाँ तरीके इस समारोह का अनुकूलन करने के एक नंबर रहे हैं।)) उद्देश्यों, लेकिन नीचे बताए गए कारणों के लिए तकनीकी रूप से काफी गलत हैं।
जावास्क्रिप्ट सरणी केवल 'संख्यात्मक' कुंजी का उपयोग करें। जब आप किसी सरणी पर "सहयोगी कुंजी" सेट करते हैं, तो आप वास्तव में उस सरणी ऑब्जेक्ट पर एक प्रॉपर्टी सेट कर रहे हैं, न कि उस सरणी का तत्व। उदाहरण के लिए, इसका मतलब है कि "सहयोगी कुंजी" Array.forEach() का उपयोग करते समय पुनरावृत्त नहीं किया जाएगा और Array.length की गणना करते समय शामिल नहीं किया जाएगा। (इसके लिए अपवाद '0' जैसे स्ट्रिंग सरणी के तत्व को हल करेगा, लेकिन '0' जैसे तार नहीं होंगे।)
इसके अतिरिक्त, सरणी तत्व या ऑब्जेक्ट प्रॉपर्टी की जांच करना जो मौजूद नहीं है मूल्यांकन करता है अपरिभाषित के रूप में, लेकिन यह वास्तव में आपको नहीं बताता है कि सरणी तत्व या वस्तु गुण अभी तक सेट नहीं किया गया है। उदाहरण के लिए, अपरिभाषित परिणाम भी आपको एक फ़ंक्शन को कॉल करके मिलता है जो रिटर्न स्टेटमेंट को समाप्त नहीं करता है। यह कुछ अजीब त्रुटियों और डीबगिंग कोड में कठिनाई का कारण बन सकता है।
यह भ्रमित हो सकता है, लेकिन आपके ब्राउज़र के जावास्क्रिप्ट कंसोल का उपयोग करके बहुत आसानी से खोजा जा सकता है। (मैंने क्रोम का इस्तेमाल किया, प्रत्येक टिप्पणी इससे पहले लाइन के मूल्यांकन मूल्य को इंगित करती है।);
var foo = new Array();
foo;
//[]
foo.length;
//0
foo['bar'] = 'bar';
//"bar"
foo;
//[]
foo.length;
//0
foo.bar;
//"bar"
यह दिखाता है कि साहचर्य कुंजी सरणी में तत्वों का उपयोग करने के लिए नहीं किया जाता है, लेकिन ऑब्जेक्ट के गुणों के लिए।
foo[0] = 0;
//0
foo;
//[0]
foo.length;
//1
foo[2] = undefined
//undefined
typeof foo[2]
//"undefined"
foo.length
//3
यह दिखाता है कि typeof जाँच आप देखने के लिए अगर एक तत्व निर्धारित किया गया है की अनुमति नहीं है।
var foo = new Array();
//undefined
foo;
//[]
foo[0] = 0;
//0
foo['0']
//0
foo[' 0']
//undefined
यह अपवाद मैं उपर्युक्त पता चलता है और यही कारण है कि तुम सिर्फ parseInt उपयोग नहीं कर सकते();
यदि आप सहयोगी सरणी का उपयोग करना चाहते हैं, तो आप सरल वस्तुओं का उपयोग करना बेहतर कर सकते हैं क्योंकि अन्य उत्तरों की सिफारिश की गई है।
जावास्क्रिप्ट में Arrays सहयोगी कुंजी का उपयोग नहीं करते हैं। जब आप किसी सरणी पर "सहयोगी कुंजी" सेट करते हैं, तो आप वास्तव में उस सरणी ऑब्जेक्ट पर एक प्रॉपर्टी सेट कर रहे हैं, न कि उस सरणी का तत्व। इसका मतलब है कि "सहयोगी कुंजी" Array.forEach() का उपयोग करते समय पुनरावृत्त नहीं किया जाएगा और Array.length की गणना करते समय शामिल नहीं किया जाएगा। यदि आप चाहते हैं कि "सहयोगी सरणी" नीचे उल्लिखित वस्तु का उपयोग करें। यदि आप देखना चाहते हैं कि किसी ऑब्जेक्ट में कोई संपत्ति है, तो यह उत्तर देखें: http://stackoverflow.com/questions/135448/how-do-i-check-if-an-object-has-a-property-in- जावास्क्रिप्ट – Omn