.indexOf()
और .includes()
विधियों का उपयोग किसी सरणी में एक तत्व की खोज के लिए या किसी दिए गए स्ट्रिंग में एक चरित्र / विकल्प को खोजने के लिए किया जा सकता है।
ऐरे में उपयोग
( ECMAScript स्पेसिफिकेशन से लिंक )
indexOf
का उपयोग करता सख्त समानता तुलना जबकि includes
का उपयोग करता है SameValueZero एल्गोरिथ्म। इस कारण से, मतभेद के दो बिंदु उत्पन्न होते हैं।
जैसा कि फेलिक्स क्लिंग ने कहा है , व्यवहार अलग है NaN
।
let arr = [NaN];
arr.indexOf(NaN); // returns -1; meaning NaN is not present
arr.includes(NaN); // returns true
- के मामले में व्यवहार भी अलग है
undefined
।
let arr = [ , , ];
arr.indexOf(undefined); // returns -1; meaning undefined is not present
arr.includes(undefined); // returns true
स्ट्रिंग में उपयोग
( ECMAScript स्पेसिफिकेशन से लिंक )
- यदि आप एक RegExp पास करते हैं
indexOf
, तो यह RegExp को एक स्ट्रिंग के रूप में मानेगा और यदि यह पाया जाता है, तो स्ट्रिंग के सूचकांक को लौटा देगा। हालाँकि, यदि आप एक RegExp पास करते हैं, तो includes
यह एक अपवाद फेंक देगा।
let str = "javascript";
str.indexOf(/\w/); // returns -1 even though the elements match the regex because /\w/ is treated as string
str.includes(/\w/); // throws TypeError: First argument to String.prototype.includes must not be a regular expression
प्रदर्शन
जैसा कि 538ROMEO ने बताया, includes
थोड़ा (बहुत छोटा) थोड़ा धीमा हो सकता है (इसके लिए पहले तर्क के रूप में एक रेगेक्स की जांच करना आवश्यक है)indexOf
लेकिन वास्तव में, इससे बहुत फर्क नहीं पड़ता और नगण्य है।
इतिहास
String.prototype.includes()
ECMAScript 2015 Array.prototype.includes()
में पेश किया गया था जबकि ECMAScript 2016 में पेश किया गया था। ब्राउज़र समर्थन के संबंध में, उन्हें बुद्धिमानी से उपयोग करें।
String.prototype.indexOf()
और Array.prototype.indexOf()
ईसीएमएस्क्रिप्ट के ईएस 5 संस्करण में मौजूद हैं और इसलिए सभी ब्राउज़रों द्वारा समर्थित हैं।
includes
बहुत बुरा ब्राउज़र समर्थन है।