क्विज़: क्या आप जावास्क्रिप्ट पर भरोसा कर सकते हैं?
क्या आप parseInt और parseFloat में अंतर जानते हैं?
मेरी JavaScript Numbers चुनौती में आपका स्वागत है!
यह क्विज़ JS की संख्याओं के साथ-साथ parseInt, parseFloat और BigInt का आपका ज्ञान परखेगा।
हम अलग-अलग आधारों में संख्यात्मक अभिव्यक्तियाँ पार्स करना, फ़्लोटिंग-पॉइंट सटीकता संभालना और JavaScript की संख्या प्रणाली की विचित्रताएँ समझना देखेंगे।
बस संख्याएँ ही तो हैं, कितना मुश्किल हो सकता है? 🤓
0.1 + 0.2 === 0.3फ़्लोटिंग‑पॉइंट सटीकता त्रुटियों के कारण, 0.1 + 0.2 बिल्कुल 0.3 के बराबर नहीं होता। फ़्लोटिंग‑पॉइंट संख्याएँ मेमोरी में जिस तरह संग्रहीत होती हैं, उसके कारण परिणाम 0.30000000000000004 आता है। फ़्लोटिंग‑पॉइंट अंकगणित को संभालने वाला IEEE 754 मानक ही कारण है, यह कुछ संख्याओं को ठीक‑ठीक दर्शा नहीं सकता। यह सभी प्रोग्रामिंग भाषाओं में आम समस्या है। अंत में आप अनंत दोहराव वाले दशमलव से मिलेंगे, और चाहे भाषा कोई भी हो—कंप्यूटर को अनंत अंकों का पीछा बंद करना पड़ता है।
Python और Java जैसी कुछ भाषाओं में Decimal या BigDecimal होते हैं जो इसे संभालते हैं, लेकिन JavaScript में ऐसा अंतर्निहित नहीं है। आप big.js या decimal.js जैसी लाइब्रेरीज़ का उपयोग करके इन मामलों को हल कर सकते हैं।
(ध्यान दें: कुछ भाषाएँ अंश, काल्पनिक संख्याएँ आदि को उच्च स्तर पर संभालने के लिए डिज़ाइन की गई हैं, जिससे लिटरल अभिव्यक्तियों को संरक्षित रखा जाता है। लेकिन उन्हें भी हार्डवेयर स्तर पर वही फ़्लोटिंग‑पॉइंट सटीकता समस्याओं का सामना करना पड़ता है।)
यह क्या कर सकता है?
5..toFixed(2).toFixed(2) दो दशमलव स्थानों के साथ 5 का स्ट्रिंग प्रतिनिधित्व लौटाता है, इसलिए परिणाम "5.00" है।
डबल डॉट (5..toFixed(2)) एक ‘ट्रिक’ है जिससे Number Literals का ऑब्जेक्ट मॉडल एक्सेस किया जाता है।
[24, 'One', 42].map(parseInt)parseInt का दूसरा तर्क (radix) एरे मेथड के index तर्क के साथ मेल खाता है। इससे अप्रत्याशित परिणाम मिलते हैं, क्योंकि parseInt("One", 1) अवैध इनपुट के कारण NaN लौटाता है.
पहला तत्व, 24, बेस 0 (ऑटो‑डिटेक्ट) में 24 के रूप में पार्स होता है, इसलिए यह 24 ही रहता है। दूसरा तत्व, 'One', बेस 1 में NaN के रूप में पार्स होता है। तीसरा तत्व, 42, बेस 2 में पार्स होता है। बेस 2 में '42' NaN है, इसलिए परिणाम [24, NaN, NaN] मिलता है.
यह parseInt और map के साथ एक सामान्य गड़बड़ी है। यदि आप स्ट्रिंग्स की एरे को नंबर में बदलना चाहते हैं, तो एकमात्र सुरक्षित “बिल्ट‑इन” तरीका .map(Number) है या कॉलबैक/एनक्लोज़र जोड़ें जैसे .map(x => parseInt(x, 10)).
तुलना तालिका
| फ़ंक्शन | parseInt | parseFloat | Number | BigInt |
|---|---|---|---|---|
| खाली जगह को अनदेखा करता है | ✅ | ✅ | ✅ | ✅ |
| .map(FN) | ❌ | ☑️ | ✅ | ✅ |
| रेडिक्स आर्ग का समर्थन | ✅ | ❌ | ❌ | ❌ |
| स्ट्रिंग में बाइनरी/ऑक्टल/हेक्स उपसर्ग | केवल हेक्स 0x; 0b/0o अपने आप नहीं पहचाने जाते | ❌ | ✅ | ✅ |
अवैध अक्षर 42 oh no | 42 | 42 | NaN | SyntaxError |
आपका परिणाम क्या रहा? 🧐
इतने बाइनरी के बाद थोड़ा आराम चाहिए?
पफ़्ट, याद रखें: कौशल के बाद ब्रेक!
और चुनौतियों को तोड़ने के लिए मेरी जिम पर जाएँ! 💪
