JavaScript में वैल्यू अलग-अलग टाइप की हो सकती हैं। किसी वेरिएबल का टाइप बदलने के लिए स्पष्ट टाइप कन्वर्ज़न किया जा सकता है। इसके अलावा, जब संदर्भ को ज़रूरत होती है, तब JavaScript टाइप कोर्शन (अंतर्निहित टाइप कन्वर्ज़न) भी करता है।
बहुत सी दूसरी भाषाओं की तरह JavaScript में किसी (दूसरे) टाइप में कास्ट करने का कोई तरीका नहीं है, लेकिन इसके बजाय कुछ बिल्ट-इन हेल्पर इस्तेमाल किए जा सकते हैं।
सबसे खास बात यह है कि Boolean, Number और String को फंक्शन की तरह इस्तेमाल करके किसी वैल्यू को उसी से जुड़े टाइप में बदला जा सकता है।
Boolean(value) की मदद से आप किसी भी वैल्यू को बूलियन में बदल सकते हैं।
वैल्यू का एक तय समूह है, जिन्हें फॉल्सी वैल्यू कहते हैं, जो false में बदल जाती हैं।
सबसे ज़रूरी बात, false, 0, खाली स्ट्रिंग, null, undefined और NaN फॉल्सी होती हैं।
बाकी सभी वैल्यू के लिए Boolean true लौटाता है।
ऐसी वैल्यू को ट्रूथी कहते हैं।
Boolean(-1);
// => true
Boolean(0);
// => false
Boolean(' ');
// => true
Boolean('');
// => false
ध्यान दीजिए कि बताए गए नियमों के कारण JavaScript में '0', 'false', [] और {} ट्रूथी होते हैं।
किसी वैल्यू को संख्या में बदलने के लिए Number(value) इस्तेमाल किया जा सकता है।
स्ट्रिंग के शुरू और अंत की खाली जगहें नज़रअंदाज़ की जाती हैं, और खाली स्ट्रिंग 0 में बदल जाती है।
अगर आप किसी नॉन-प्रिमिटिव वैल्यू या ऐसी स्ट्रिंग को बदलने की कोशिश करते हैं जो किसी संख्या को नहीं दर्शाती, तो परिणाम NaN होता है (संख्या नहीं)।
Number(' -12.34 ');
// => -12.34
Number('1,2');
// => NaN
Number('');
// => 0
Number({ num: 123 });
// => NaN
String(value) की मदद से आप किसी वैल्यू को स्ट्रिंग में बदल सकते हैं।
प्रिमिटिव वैल्यू के लिए परिणाम वही होता है जिसकी आप अपेक्षा करेंगे।
String(12.34);
// => '12.34'
String(false);
// => 'false'
String(null);
// => 'null'
String(undefined);
// => 'undefined'
ऐरे के लिए, String फंक्शन हर एलिमेंट पर स्ट्रिंग कन्वर्ज़न लागू करता है और नतीजों को कॉमा से जोड़ देता है।
आप खुद भी join मेथड लागू कर सकते हैं, जैसे सेपरेटर को अपनी पसंद के मुताबिक बदलने के लिए।
ध्यान दीजिए कि इन मामलों में null और undefined खाली स्ट्रिंग में बदल जाते हैं।
String([42, null, true, 'abc']);
// => '42,,true,abc'
ऑब्जेक्ट के लिए, String डिफॉल्ट रूप से एक ऐसा टेक्स्ट लौटाता है जिससे कोई खास मदद नहीं मिलती।
String({ key: 'value' });
// => '[object Object]'
कुछ संदर्भों में, JavaScript किसी स्टेटमेंट का मूल्यांकन करने से पहले किसी वैल्यू को अपने आप दूसरे डेटा टाइप में बदल देता है। इस अंतर्निहित कन्वर्ज़न को टाइप कोर्शन कहते हैं।
जब किसी बूलियन संदर्भ में कोई गैर-बूलियन वैल्यू इस्तेमाल होती है, तो JavaScript उस वैल्यू को अपने आप बदलने के लिए Boolean फंक्शन जैसे ही नियम लागू करता है।
बूलियन में कोर्शन आम तौर पर इन जगहों पर होता है
if स्टेटमेंट की शर्त? का पहला ऑपरेंड! का ऑपरेंड&& और ऑर || ऑपरेटर के ऑपरेंड (एक्सप्रेशन का परिणाम उन ऑपरेंड में से एक होता है, ज़रूरी नहीं कि वह बूलियन हो)const num = 0;
if (num) {
// this block is NOT executed because 0 is falsy
}
अगर जोड़ने वाला ऑपरेटर + प्रिमिटिव वैल्यू पर इस्तेमाल होता है और एक ऑपरेंड स्ट्रिंग है, तो दूसरा ऑपरेंड भी स्ट्रिंग में बदल दिया जाता है।
कन्वर्ज़न का तरीका वही है जो String फंक्शन इस्तेमाल करने पर होता है।
इसके बाद, दोनों स्ट्रिंग जोड़ दी जाती हैं।
let name;
'hello ' + name;
// => 'hello undefined'
बहुत से ऑपरेटर ऊपर बताए गए Number फंक्शन के तरीके के मुताबिक ऑपरेंड को (ज़रूरत पड़ने पर) संख्याओं में बदल देते हैं।
+ (अगर कोई स्ट्रिंग शामिल न हो), -, *, /, %, **
+, -
>, >=, <, <=
|, &, ^, ~
इनमें से किसी भी ऑपरेटर के बारे में ज़्यादा जानकारी के लिए MDN ऑपरेटर सूची देखिए।
गलतियों से बचने के लिए यह अच्छी आदत है कि इन ऑपरेटरों को लगाने से पहले हमेशा Number को स्पष्ट रूप से कॉल कीजिए।
आपका दोस्त Kojo को संख्याओं से बहुत लगाव है। उसकी 'fun-with-numbers' नाम की एक छोटी वेबसाइट है। Kojo प्रोग्रामिंग में उतना अच्छा नहीं है, इसलिए उसने आपसे मदद माँगी है।
आपको Kojos की वेबसाइट पर संख्याओं के नए खेलों के लिए दो सहायक फंक्शन बनाने हैं, और एक तीसरा फंक्शन बनाना है जो उपयोगकर्ता के डाले गए इनपुट की जाँच करेगा।
Kojos की वेबसाइट के खेलों में से एक स्लॉट मशीन जैसा दिखता है, जिस पर अंकों वाले पहियों के दो समूह दिखाई देते हैं। अंकों का हर समूह एक संख्या दर्शाता है। खेल के नियमों के लिए Kojo को इन दोनों संख्याओं का जोड़ पता होना चाहिए।
twoSum नाम का एक फंक्शन लिखिए जो पैरामीटर के रूप में दो ऐरे लेता है।
हर ऐरे में 0 से 9 के बीच की एक या अधिक संख्याएँ होती हैं।
फंक्शन को हर ऐरे को एक संख्या के रूप में समझना चाहिए और उन दोनों संख्याओं का जोड़ लौटाना चाहिए।
twoSum([1, 2, 3], [0, 7]);
//=> 130
// [1, 2, 3] represents 123 and [0, 7] represents 7.
// 123 + 7 = 130
वेबसाइट पर एक और खेल है, "Lucky Numbers" नाम का एक छोटा क्विज़। उपयोगकर्ता एक संख्या दर्ज कर सकता है और फिर देखता है कि वह संख्या किसी गुप्त क्रम या पैटर्न में आती है या नहीं। "lucky numbers" का क्रम या पैटर्न हर महीने बदलता है, और हर उपयोगकर्ता के पास इसे अनुमान लगाने के सीमित मौके होते हैं।
इस महीने की लकी संख्याएँ वे संख्याएँ होनी चाहिए जो पैलिंड्रोम हों। पैलिंड्रोम संख्याएँ अंकों को उलट देने पर भी वही रहती हैं।
नया luckyNumber फंक्शन बनाइए जो पैरामीटर के रूप में एक संख्या लेता है।
अगर संख्या पैलिंड्रोम है तो फंक्शन को true लौटाना चाहिए, वरना false।
इनपुट में दी गई संख्या हमेशा एक धनात्मक पूर्णांक होगी।
luckyNumber(1441);
//=> true
luckyNumber(123);
//=> false
वेबसाइट पर कई जगहों पर ऐसे इनपुट फील्ड हैं जहाँ उपयोगकर्ता संख्याएँ दर्ज कर सकते हैं और कोई काम शुरू करने के लिए बटन पर क्लिक कर सकते हैं। Kojo अपनी साइट का उपयोगकर्ता अनुभव बेहतर बनाना चाहता है। वह ऐसी स्थिति में एरर संदेश दिखाना चाहता है जब उपयोगकर्ता बटन पर क्लिक करे, लेकिन फील्ड में अमान्य इनपुट वैल्यू हो।
यहाँ कुछ और जानकारी दी गई है कि किसी इनपुट फील्ड की वैल्यू कैसे मिलती है।
undefined या null हो सकता है।errorMessage नाम का एक फंक्शन लिखिए जो पैरामीटर के रूप में उपयोगकर्ता का इनपुट लेता है।
अगर उपयोगकर्ता ने कोई इनपुट नहीं दिया, तो errorMessage को 'Required field' लौटाना चाहिए।
अगर इनपुट किसी गैर-शून्य संख्या को नहीं दर्शाता (JavaScript के रूपांतरण नियमों के अनुसार), तो 'Must be a number besides 0' लौटाया जाना चाहिए।
बाकी सभी मामलों में आप मान सकते हैं कि इनपुट मान्य है, और रिटर्न वैल्यू एक खाली स्ट्रिंग होनी चाहिए।
errorMessage('123');
// => ''
errorMessage('');
// => 'Required field'
errorMessage('abc');
// => 'Must be a number besides 0'
Exercism पर साइन अप कीजिए और JavaScript को 37 कॉन्सेप्ट159 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।