JavaScript में, एक TypeError एक ऑब्जेक्ट है जो एक ऑपरेशन करने के परिणामस्वरूप होने वाली त्रुटि को दर्शाता है जिसे किया नहीं जा सकता, आमतौर पर क्योंकि किसी ऑपरेशन में एक मान अपेक्षित प्रकार का नहीं है।
लेकिन प्रकार क्या हैं? JavaScript विशिष्टताओं के नवीनतम संस्करण, ECMAScript के अनुसार, नौ डेटा और संरचनात्मक प्रकार हैं। जिनमें से छह (कभी-कभी सात अगर हम null गिनते हैं), प्राइमिटिव डेटा प्रकार हैं, वे हैं: string, number, bigint, boolean, undefined, और symbol। इससे पहले कि हम समझ सकें कि TypeErrors किसी ऑपरेशन के दौरान क्यों ट्रिगर होते हैं, आइए JavaScript में अपने नौ प्रकारों की समीक्षा करें। यदि हम कभी ऐसी स्थिति में हैं जहां हम इस बारे में अनिश्चित हैं कि किसी प्रकार को कैसे वर्गीकृत किया जाए, तो हम typeof ऑपरेटर का उपयोग कर सकते हैं।
- undefined: एक प्रकार का मान जो स्वचालित रूप से उन वेरिएबल्स को परिभाषित हो जाता है जिन्हें अभी घोषित किया गया है। जब हम अपने वेरिएबल को परिभाषित करना या उसमें मान जोड़ना भूल जाते हैं तो हमें अक्सर undefined का टाइपएरर मान मिलता है।
- Boolean: केवल true या false मानों वाला लॉजिकल डेटा प्रकार।
- Number: न्यूमेरिक डेटा प्रकार।
- String: बैकटिक्स, सिंगल, या डबल कोट्स के अंदर कैरेक्टर्स का अनुक्रम।
- BigInt: न्यूमेरिक डेटा प्रकार जिसे कभी-कभी अन्य प्रोग्रामिंग भाषाओं में bignums के रूप में जाना जाता है।
- Symbol: Symbol फंक्शन को इनवोक करके बनाया गया एक अद्वितीय पहचानकर्ता दर्शाने वाला मान।
- Object: एक संरचनात्मक प्रकार और लगभग वह सब कुछ जो 'new' कीवर्ड बनाने में सक्षम है, जैसे सरणी, ऑब्जेक्ट, मैप, सेट, आदि।
- Function: एक और गैर-डेटा संरचना जो कोड स्निपेट है जिसे कोड के अन्य टुकड़ों द्वारा बुलाया जा सकता है।
- null: आमतौर पर एक जानबूझकर मान जो किसी ऑब्जेक्ट या पते का प्रतिनिधित्व करता है जो मौजूद नहीं है।
सबसे आम JavaScript TypeErrors और उन्हें कैसे ठीक करें
TypeErrors आपके ऊपर तब फेंके जा सकते हैं जब किसी ऐसे मान को बदलने का प्रयास किया जाता है जिसे बदला नहीं जा सकता या जब किसी मान का अनुचित तरीके से उपयोग किया जाता है। यह तब भी हो सकता है जब किसी फंक्शन को एक आर्गुमेंट पास किया जाता है जो फंक्शन या फंक्शन के अंदर ऑपरेटर द्वारा अपेक्षित प्रकार के साथ असंगत होता है।
1. ऐसे मान को बदलना जिसे बदला नहीं जा सकता
जब आप किसी चीज़ को मान निर्दिष्ट करने के लिए const कीवर्ड का उपयोग करते हैं, तो इसका मतलब है कि यह स्थिर है, यह नहीं बदलेगा। एक स्थिर वेरिएबल के मान को बदलने का प्रयास करने पर TypeError होगा।
const a = 5; a = "5"; // Uncaught TypeError: Assignment to constant variable.
हम इसे केवल उस पहचानकर्ता का नाम बदलकर ठीक कर सकते हैं जिसे हम "5" स्ट्रिंग की पहचान करना चाहते हैं।
const a = 5; const b = "5";
2. किसी मान का अनुचित तरीके से उपयोग करना
डेवलपर्स को यह भी सुनिश्चित करना होगा कि मान इच्छित तरीके से उपयोग किए जा रहे हैं। नीचे दिए गए उदाहरण में, "Cat" और "garfield" Cat() फंक्शन का इंस्टेंस है या नहीं यह सत्यापित करने का प्रयास करते समय उल्टे हैं।
function Cat() {}
function Dog() {}
let garfield = new Cat();
Cat instanceof garfield; // Uncaught TypeError: Right-hand side of 'instanceof' is not callable
हम दोनों के क्रम को सही करके इसे ठीक कर सकते हैं।
function Cat() {}
function Dog() {}
let garfield = new Cat();
garfield instanceof Cat;
3. एक आर्गुमेंट जो फंक्शन द्वारा अपेक्षित प्रकार के साथ असंगत है
किसी ऑपरेशन को कोड करते समय, डेवलपर्स को यह सुनिश्चित करना होगा कि वे मानों का उपयोग उन तरीकों से कर रहे हैं जिनसे वे वांछित परिणाम प्राप्त कर सकें। Null का मान किसी ऑब्जेक्ट की अनुपस्थिति को दर्शाने के लिए जानबूझकर उपयोग किया जा सकता है, लेकिन जिस तरह से इसका उपयोग नीचे किया गया है, वह TypeError का परिणाम देगा क्योंकि इसे फंक्शन द्वारा अपेक्षित प्रकार के साथ असंगत आर्गुमेंट के रूप में उपयोग किया जा रहा है।
function readingErrorsAreImportant(a){
if(a.length === 5){
return "equals five";
} else if(a.length > 5) {
return "Greater than five";
} else {
return "Less than five";
}
}
console.log(readingErrorsAreImportant(null));
// Uncaught TypeError: Cannot read property 'length' of null
हम इसे उस मान प्रकार को पास करके ठीक कर सकते हैं जिसकी यह अपेक्षा कर रहा है। जैसे एक न्यूमेरिक मान प्रकार।
function readingErrorsAreImportant(a){
if(a.length === 5){
return "equals five";
} else if(a.length > 5) {
return "Greater than five";
} else {
return "Less than five";
}
}
console.log(readingErrorsAreImportant(10));
निष्कर्ष
यह समझना महत्वपूर्ण है कि आपका कोड टाइप एरर क्यों फेंक रहा है ताकि आप समझ सकें कि इसे कैसे डीबग करना है। यदि आप कभी ऐसी स्थिति में हैं जहां आप इस बारे में अनिश्चित हैं कि किसी प्रकार को कैसे वर्गीकृत किया जाए, तो typeof ऑपरेटर आपको बेहतर समझ के लिए नौ डेटा या संरचनात्मक प्रकारों में से एक लौटाएगा कि आपको डीबगिंग के साथ कैसे आगे बढ़ना चाहिए।