मान लीजिए हमारे पास एक कोड स्निपेट है जो कुछ चौंकाने वाले परिणाम देता है। पहली बात, हम देखते हैं कि मॉड्यूलो ऑपरेटर स्ट्रिंग के साथ भी ठीक काम करता है (आश्चर्यजनक रूप से)। दूसरी बात, दो स्ट्रिंग्स का कन्कैटिनेशन अजीब परिणाम देता है।
हमें यह समझाना है कि JavaScript ऐसा क्यों करता है?
यहां समस्या कोड है:
उदाहरण
const numStr = '127';
const result = numStr % 5;
const firstName = 'Armaan';
const lastName = 'Malik';
const fullName = firstName + + lastName;
console.log('modulo result: ', result);
console.log('full name: ', fullName);
आउटपुट
modulo result: 2 full name: ArmaanNaN
कोड में कूदने से पहले, आइए JavaScript के सबसे मौलिक विषयों में से एक के बारे में थोड़ा सीखें → टाइप कोएरशन।
टाइप कोएरशन
मूल रूप से, टाइप कोएरशन JavaScript कंपाइलर्स द्वारा एक डेटा प्रकार को दूसरे में बदलने का एक तरीका है। वैध टाइप कोएरशन के उदाहरण होंगे स्ट्रिंग को बूलियन में बदलना, नंबर को स्ट्रिंग में बदलना, आदि।
टाइप कोएरशन एक बहुत बड़ा विषय है और इस समाधान की लंबाई को सीमित करने के लिए हम केवल इस कोड स्निपेट में उपयोग की जाने वाली चीजों का पता लगाएंगे। टाइप कोएरशन के दो प्रकारों में से, जो कंपाइलर द्वारा स्वचालित रूप से किया जाता है, उसे इम्प्लिसिट टाइप कोएरशन कहा जाता है।
यह अनुसरण करता है:
- कोई भी डेटा प्रकार (प्रिमिटिव या नॉन-प्रिमिटिव) इम्प्लिसिटली इसमें बदल जाएगा → स्ट्रिंग (जब बाइनरी + ऑपरेटर के साथ उपयोग किया जाता है)।
- नंबर (जब अंकगणितीय ऑपरेटर्स जैसे +, -, /, *, % के साथ उपयोग किया जाता है और केवल यूनरी + नंबर कोएरशन ट्रिगर करता है बाइनरी + नहीं, जब तुलना ऑपरेटर, बिटवाइज़ ऑपरेटर या लूज़ इक्वैलिटी ऑपरेटर [==] के साथ उपयोग किया जाता है)।
- बूलियन (जब लॉजिकल ऑपरेटर्स &, |, ! के साथ उपयोग किया जाता है)।
***एक और बात ध्यान देने योग्य है कि यूनरी (+) ऑपरेटर की प्राथमिकता बाइनरी (+) ऑपरेटर से अधिक होती है।
कोड व्याख्या
इन बातों के स्पष्ट होने के बाद, आइए कोड पर चलते हैं और इसे लाइन दर लाइन देखते हैं:
Line 2 → result = '127' % 5;
इम्प्लिसिट कोएरशन % ऑपरेटर को देखता है, जिसके कारण यह स्ट्रिंग '127' को नंबर 127 में बदल देता है और 2 result में स्टोर हो जाता है।
Line 5 → fullName = firstName + + lastName;
fullName = firstName + (+lastName);
सामान्य तौर पर, गणना बाएं से दाएं होती लेकिन यूनरी ऑपरेटर की प्राथमिकता के कारण, यह पहले नंबर में बदल जाता है और ऑपरेशन इस तरह हो जाता है:
fullName = firstName + NaN;
और फिर
fullName = ArmaanNaN