सावधान प्रकार की ज़बरदस्ती: यह उन्नत सुविधा सूक्ष्म बग का कारण हो सकती है, इसलिए सुनिश्चित करें कि आप जानते हैं कि यह कैसे काम करता है।

जावास्क्रिप्ट की गतिशील टाइपिंग का मतलब है कि आपका कोड थोड़ा सरल हो सकता है, लेकिन फिर भी गलतियाँ करना संभव है। उनसे बचने के लिए, यह जानना उपयोगी है कि जावास्क्रिप्ट विभिन्न प्रकार के मूल्यों को कैसे हल करता है, उनकी तुलना करने के लिए।

विश्वसनीय और कुशल प्रोग्राम लिखने के लिए जावास्क्रिप्ट में प्रकार रूपांतरण और ज़बरदस्ती को समझना महत्वपूर्ण है। प्रत्येक अवधारणा में विशिष्ट उपयोग के मामले और सर्वोत्तम अभ्यास होते हैं जो आपके कोड के व्यवहार को प्रभावित कर सकते हैं।

जावास्क्रिप्ट में प्रकार रूपांतरण और ज़बरदस्ती क्यों होती है?

जावास्क्रिप्ट भाषा गतिशील रूप से टाइप किया गया है। इसका मतलब यह है कि, स्थिर रूप से टाइप की गई भाषाओं के विपरीत, जावास्क्रिप्ट का उपयोग करने से पहले आपको किसी चर के डेटा प्रकार को स्पष्ट रूप से परिभाषित करने की आवश्यकता नहीं होती है। इसके बजाय, जावास्क्रिप्ट चर के मान के आधार पर रनटाइम पर प्रकार निर्धारित करता है।

चूंकि रनटाइम तक डेटा प्रकार स्पष्ट रूप से घोषित नहीं किए जाते हैं, जब आप अलग-अलग डेटा की आवश्यकता वाले ऑपरेशन करते हैं प्रकार, जावास्क्रिप्ट स्वचालित रूप से उस ऑपरेशन के लिए एक दूसरे के साथ उनकी संगतता की जाँच करता है जिसे आप करना चाहते हैं। यदि वे एक दूसरे के साथ संगत हैं, तो ऑपरेशन सामान्य रूप से आगे बढ़ता है।

instagram viewer

हालाँकि, मान लीजिए कि वे ऑपरेशन के साथ असंगत हैं - उदाहरण के लिए, एक स्ट्रिंग और एक संख्या जोड़ने की कोशिश करना। ऐसे मामलों में, जावास्क्रिप्ट स्वचालित रूप से एक त्रुटि को फेंकने के बजाय यह सुनिश्चित करने के लिए कि ऑपरेशन सफल है, दूसरे को फिट करने के लिए "मजबूर" करता है। इस प्रक्रिया को प्रकार की ज़बरदस्ती या अंतर्निहित ज़बरदस्ती के रूप में जाना जाता है।

ज़बरदस्ती टाइप करें

प्रकार की ज़बरदस्ती एक डेटा प्रकार से दूसरे में एक मान का स्वत: रूपांतरण है, जो एक प्रोग्राम के चलने के दौरान जावास्क्रिप्ट द्वारा किया जाता है ताकि यह सुनिश्चित हो सके कि एक ऑपरेशन सफलतापूर्वक निष्पादित हो।

लेकिन सभी डेटा प्रकारों को ज़बरदस्ती नहीं किया जा सकता है। केवल स्ट्रिंग, संख्या और बूलियन ही हैं जावास्क्रिप्ट डेटा प्रकार कि भाषा एक अलग प्रकार में मजबूर हो जाएगी। जब आप डेटा प्रकारों के साथ एक असंगत ऑपरेशन करने का प्रयास करते हैं जो कि जावास्क्रिप्ट को बाध्य नहीं कर सकता है, तो यह एक त्रुटि फेंक देगा।

जावास्क्रिप्ट ऑपरेशन के प्रकार और ऑपरेशन में आपके द्वारा उपयोग किए जाने वाले ऑपरेटर के आधार पर टाइप करता है।

"+" ऑपरेटर के साथ ज़बरदस्ती

जावास्क्रिप्ट में, "+”ऑपरेटर के ऑपरेंड के प्रकार के आधार पर ऑपरेटर के दो अलग-अलग व्यवहार होते हैं। यह संख्यात्मक जोड़ और स्ट्रिंग संघनन दोनों कर सकता है। जब एक ऑपरेंड अपेक्षित प्रकार का नहीं होता है, तो यह टाइप ज़बरदस्ती का कारण बन सकता है।

यदि दोनों ऑपरेंड नंबर हैं, तो "+"ऑपरेटर जोड़ करता है:

होने देना संख्या 1 = 42;
होने देना संख्या 2 = 10;
होने देना योग = संख्या 1 + संख्या 2; // जोड़ना
सांत्वना देनालॉग (योग); // 52

यदि दोनों ऑपरेंड तार हैं, तो "+” ऑपरेटर स्ट्रिंग संयोजन करता है:

होने देना str1 = "नमस्ते";
होने देना str2 = "दुनिया";
होने देना परिणाम = str1 + " " + str2; // स्ट्रिंग संघनन
सांत्वना देनालॉग (परिणाम); // "हैलो वर्ल्ड"

हालाँकि, यदि कोई एक ऑपरेंड एक स्ट्रिंग नहीं है, तो जावास्क्रिप्ट संयोजन करने से पहले इसे एक स्ट्रिंग में शामिल कर देगा:

// संख्या और स्ट्रिंग
होने देना संख्या = 42;
होने देना स्ट्र = "नमस्ते";

// संख्या को एक स्ट्रिंग के लिए मजबूर किया जाता है और फिर सम्‍मिलित किया जाता है
होने देना परिणाम_1 = संख्या + str;
सांत्वना देनालॉग (परिणाम_1); // "42हैलो"

// स्ट्रिंग और बूलियन
होने देना बूल = सत्य;

// बूल को एक स्ट्रिंग के लिए मजबूर किया जाता है और फिर जोड़ा जाता है
होने देना परिणाम_2 = बूल + स्ट्र;
सांत्वना देनालॉग (परिणाम_2); // "सच हैलो"

"-" ऑपरेटर के साथ ज़बरदस्ती

जावास्क्रिप्ट में, "-”ऑपरेटर मुख्य रूप से घटाव कार्यों के लिए उपयोग किया जाता है। जब एक या दोनों एक ऑपरेशन में शामिल होते हैं जिसमें "-” ऑपरेटर एक संख्या नहीं है, जावास्क्रिप्ट इसे एक संख्या में ज़बरदस्ती करने की कोशिश करेगा।

जब दोनों ऑपरेंड नंबर होते हैं, तो जावास्क्रिप्ट घटाव करता है। यह घटाव भी करता है जब एक या दोनों ऑपरेंड तार होते हैं जो एक संख्या का प्रतिनिधित्व करते हैं:

कॉन्स्ट संख्या 1 = 10;
कॉन्स्ट संख्या 2 = 20;
कॉन्स्ट परिणाम_1 = संख्या 2 - संख्या 1; // घटाव
सांत्वना देनालॉग (परिणाम_1); // 10

कॉन्स्ट स्ट्रनम = "10";
कॉन्स्ट strNum2 = "20";
कॉन्स्ट परिणाम = strNum2 - strNum; // संख्याओं के लिए ज़बरदस्ती टाइप करें, फिर घटाव
सांत्वना देनालॉग (परिणाम_1); // 10

जब कोई भी ऑपरेंड एक संख्या या संख्या का प्रतिनिधित्व करने वाली स्ट्रिंग नहीं है, तो जावास्क्रिप्ट डेटा प्रकार को उसके संख्यात्मक समकक्ष के लिए बाध्य करने का प्रयास करेगा। यदि डेटा प्रकार में कोई संख्यात्मक समतुल्य नहीं है, तो ऑपरेशन वापस आ जाएगा नेन (संख्या नहीं):

// सच 1 के लिए मजबूर हो जाता है, झूठ 0 के लिए मजबूर हो जाता है
कॉन्स्ट बूलनम = सत्य;
कॉन्स्ट बूलनम2 = असत्य;
कॉन्स्ट परिणाम_1 = बूलनम - बूलनम2;
सांत्वना देनालॉग (परिणाम_1); // 1

// खाली सरणियों को 0 के लिए मजबूर किया जाता है
कॉन्स्ट अर्रनुम = [];
कॉन्स्ट arrNum2 = [];
कॉन्स्ट परिणाम_2 = arrNum - arrNum2;
सांत्वना देनालॉग (परिणाम_2); // 0

// खाली वस्तुओं को NaN के लिए मजबूर किया जाता है
कॉन्स्ट ओबजेनम = {};
कॉन्स्ट परिणाम_3 = arrNum - objNum;
सांत्वना देनालॉग (परिणाम_3); // 0 - नाएन = नाएन

इस उदाहरण में, जावास्क्रिप्ट बूलियन मानों को मजबूर करता है सत्य और असत्य उनके संख्यात्मक समकक्ष मूल्यों के लिए, 1 और 0, क्रमश। खाली सरणियों को मजबूर किया जाता है 0, और खाली वस्तुओं को मजबूर किया जाता है नेन.

समानता (==)/() ऑपरेटरों के साथ जबरदस्ती

जावास्क्रिप्ट में, समानता ऑपरेटर्स (== और ) समानता के लिए मूल्यों की तुलना करें। हालाँकि, वे टाइप ज़बरदस्ती के कारण अलग व्यवहार करते हैं।

"==” (ढीली समानता) ऑपरेटर प्रकार की ज़बरदस्ती करता है, जिसका अर्थ है कि यह तुलना करने से पहले ऑपरेंड को उसी प्रकार में बदलने की कोशिश करता है:

"10" == 10; // सत्य

इस उदाहरण में, जावास्क्रिप्ट स्ट्रिंग "10" को संख्या 10 तक ले जाती है, इसलिए अभिव्यक्ति का मूल्यांकन होता है सत्य.

हालांकि "” (सख्त समानता) ऑपरेटर प्रकार की जबरदस्ती नहीं करता है। वापसी की तुलना के लिए इसे मूल्य और प्रकार की आवश्यकता होती है सत्य:

"10"10; // असत्य

इस उदाहरण में, तुलना वापस आती है असत्य क्योंकि ऑपरेंड विभिन्न प्रकार (स्ट्रिंग और नंबर) के होते हैं।

आपको आम तौर पर इसका उपयोग करना चाहिए (सख्त समानता) अप्रत्याशित प्रकार के ज़बरदस्त व्यवहार से बचने के लिए जावास्क्रिप्ट में ऑपरेटर।

प्रकार की ज़बरदस्ती या अंतर्निहित रूपांतरण इसकी स्वचालित प्रकृति के कारण अप्रत्याशित व्यवहार का कारण बन सकता है। ऐसे मामलों में जहां आपको प्रकारों को परिवर्तित करने की आवश्यकता होती है, यह सलाह दी जाती है कि प्रकारों को स्पष्ट रूप से रूपांतरित करें। प्रकारों को स्पष्ट रूप से परिवर्तित करने की प्रक्रिया को प्रकार रूपांतरण के रूप में जाना जाता है। इसे टाइप कास्टिंग और स्पष्ट प्रकार के रूपांतरण के रूप में भी जाना जाता है।

प्रकार रूपांतरण

टाइप रूपांतरण, जिसे टाइप कास्टिंग के रूप में भी जाना जाता है, जावास्क्रिप्ट में एक डेटा प्रकार से दूसरे में अंतर्निहित फ़ंक्शंस का उपयोग करके मान को परिवर्तित करने की स्पष्ट प्रक्रिया है संख्या(), डोरी(), बूलियन (), ParseInt (), और पार्सफ्लोट ().

आप उस मान को पारित करके प्रकार रूपांतरण कर सकते हैं जिसे आप अंतर्निर्मित रूपांतरण कार्यों में एक तर्क के रूप में परिवर्तित करना चाहते हैं। ये फ़ंक्शन तब आपके मान को आपके वांछित प्रकार में परिवर्तित करते हैं।

यहाँ का उपयोग कर एक उदाहरण दिया गया है संख्या() समारोह:

कॉन्स्ट संख्या एसटीआर = "123";
कॉन्स्ट संख्या = संख्या(संख्या एसटी); // एक स्ट्रिंग को एक संख्या में परिवर्तित करता है
सांत्वना देनालॉग (संख्या); // 123

एक तर्क के रूप में एक वैध संख्या है जो एक स्ट्रिंग पास करना संख्या() फ़ंक्शन एक संख्या लौटाएगा। एक अमान्य संख्या वाली स्ट्रिंग पास करना वापस आ जाएगा नेन.

यहाँ का उपयोग कर एक उदाहरण दिया गया है डोरी() समारोह:

कॉन्स्ट बूल = सत्य;
कॉन्स्ट str2 = डोरी(बूल); // बूलियन को स्ट्रिंग में बदलें
सांत्वना देनालॉग (str2); // "सत्य"

सिवाए सिंबल में किसी भी डेटा टाइप को पास करना डोरी() फ़ंक्शन डेटा प्रकार को एक स्ट्रिंग में बदल देगा।

यहाँ का उपयोग कर एक उदाहरण दिया गया है बूलियन () समारोह:

// एक स्ट्रिंग को एक बूलियन में बदलें (सत्य: सत्य, मिथ्या: असत्य)
कॉन्स्ट स्ट्र = "नमस्ते";
कॉन्स्ट बूल2 = बूलियन(एसटीआर);
सांत्वना देनालॉग (बूल 2); // सत्य

सत्य मूल्यों को पास करना बूलियन () फ़ंक्शन बूलियन को "सही" लौटाता है, जबकि झूठे मूल्यों को पारित करते हुए बूलियन को "झूठा" लौटाता है।

यहाँ का उपयोग कर एक उदाहरण दिया गया है पारसेइंट () और पारसेफ्लोट () समारोह:

// स्ट्रिंग को पूर्णांक में बदलें
कॉन्स्ट संख्या एसटीआर = "123.00";
कॉन्स्ट संख्या 1 = parseInt(संख्या एसटी);
सांत्वना देनालॉग (संख्या 1); // 123

// स्ट्रिंग को फ़्लोटिंग-पॉइंट नंबर में बदलें
कॉन्स्ट फ्लोटस्ट्र = "3.14";
कॉन्स्ट संख्या 2 = parseFloat(फ्लोटएसटीआर);
सांत्वना देनालॉग (संख्या 2); // 3.14

ParseInt () फ़ंक्शन एक स्ट्रिंग तर्क को पार्स करता है और एक पूर्णांक देता है। पार्सफ्लोट () फ़ंक्शन स्ट्रिंग को फ़्लोटिंग-पॉइंट नंबर में कनवर्ट करता है।

उत्तोलन प्रकार ज़बरदस्ती और रूपांतरण

प्रकार की ज़बरदस्ती और रूपांतरण को समझकर, आप अपने कोड में कब और कैसे उनका प्रभावी ढंग से लाभ उठा सकते हैं, इस पर सूचित निर्णय ले सकते हैं। संक्षिप्त और सुविधाजनक कोड के लिए विवेकपूर्ण तरीके से प्रकार के दबाव का उपयोग करके और जानबूझकर और अनुमानित प्रकार के रूपांतरणों के लिए स्पष्ट प्रकार के रूपांतरण पर भरोसा करते हुए, सही संतुलन बनाना महत्वपूर्ण है।