जावास्क्रिप्ट में `Number` क्लास

जावास्क्रिप्ट में `Number` क्लास

यह लेख जावास्क्रिप्ट में Number क्लास की व्याख्या करता है।

हम Number की विशेषताओं, सामान्य गलतियों, उपयोगी एपीआई और व्यावहारिक उदाहरणों को चरणबद्ध तरीके से सावधानीपूर्वक समझाएंगे।

YouTube Video

जावास्क्रिप्ट में Number क्लास

Number जावास्क्रिप्ट में मूलभूत संख्यात्मक प्रकार है और इसे IEEE-754 दोहरी सटीकता फ्लोटिंग पॉइंट (64-बिट) के रूप में दर्शाया गया है।

मूल बातें: संख्या का प्रतिनिधित्व और प्रकार की जाँच

जावास्क्रिप्ट में, सभी संख्याएँ प्रारंभिक number प्रकार के रूप में दर्शाई जाती हैं।

 1// Primitive numbers and Number object
 2const a = 42;                 // primitive number
 3const b = 3.14;               // primitive float
 4const c = Number(10);         // primitive via constructor call (function form)
 5const d = new Number(10);     // Number object (wrapper)
 6
 7console.log(typeof a);        // "number"
 8console.log(typeof d);        // "object"
 9console.log(c == d);          // true  (value coerces)
10console.log(c === d);         // false (different types)
  • यह कोड प्राथमिक number और Number व्रैपर ऑब्जेक्ट के बीच का अंतर दिखाता है। सामान्यतः, रैपर की जगह प्रारंभिक प्रकार का उपयोग किया जाता है।

विशेष मान: NaN, Infinity और स्थिरांक

Number विशेष मान (NaN, Infinity) और स्थिरांक प्रदान करता है।

 1// Special numeric values and constants
 2console.log(Number.NaN);                 // NaN
 3console.log(Number.POSITIVE_INFINITY);   // Infinity
 4console.log(Number.NEGATIVE_INFINITY);   // -Infinity
 5
 6console.log(Number.MAX_VALUE);           // largest positive representable
 7console.log(Number.MIN_VALUE);           // smallest positive representable (closest to 0)
 8console.log(Number.MAX_SAFE_INTEGER);    // 9007199254740991
 9console.log(Number.MIN_SAFE_INTEGER);    // -9007199254740991
10console.log(Number.EPSILON);             // smallest difference ~2.220446049250313e-16
  • MAX_SAFE_INTEGER से अधिक या बराबर पूर्णांक सही तरीके से दर्शाया नहीं जा सकता। यदि सटीकता की आवश्यकता हो तो BigInt का उपयोग करें। EPSILON फ्लोटिंग-पॉइंट तुलना के लिए उपयोग किया जाता है।

संख्या रूपांतरण: Number(), parseInt, parseFloat और + ऑपरेटर

स्ट्रिंग को संख्या में बदलने के कई तरीके हैं, जिनका व्यवहार अलग-अलग हो सकता है।

 1// Converting strings to numbers
 2console.log(Number("42"));        // 42
 3console.log(Number("  3.14 "));   // 3.14
 4console.log(+ "7");               // 7 (unary +)
 5
 6console.log(parseInt("42px"));    // 42
 7console.log(parseFloat("3.14abc"));// 3.14
 8
 9// Careful with parseInt and radix
10console.log(parseInt("08"));      // 8
11console.log(parseInt("08", 10));  // 8 (explicit radix is safer)
  • Number() तब तक NaN देता है जब तक पूरी स्ट्रिंग केवल संख्यात्मक स्वरुप में न हो, जबकि parseInt और parseFloat स्ट्रिंग की शुरुआत से ही पढ़ने योग्य संख्यात्मक भाग को पार्स करते हैं। parseInt का उपयोग करते समय रैडिक्स (आधार) को स्पष्ट रूप से निर्दिष्ट करना अधिक सुरक्षित है।

NaN का प्रबंधन और जांच: isNaN और Number.isNaN

NaN (नंबर नहीं) विशेष है क्योंकि NaN !== NaN होता है। उनके जांचने के तरीकों में फर्क है; वैश्विक isNaN प्रकार रूपांतरण करता है और गलत-सकारात्मक परिणाम दे सकता है, इसलिए Number.isNaN की सिफारिश की जाती है।

1// NaN detection differences
2console.log(NaN === NaN);             // false
3
4console.log(isNaN("foo"));            // true  -> because "foo" coerces to NaN
5console.log(Number.isNaN("foo"));     // false -> "foo" is not the numeric NaN
6
7console.log(Number.isNaN(NaN));       // true
  • संख्याओं की जांच और गणना के परिणामों को सत्यापित करने के लिए Number.isNaN का उपयोग करें, ताकि अनावश्यक प्रकार रूपांतरण से बचा जा सके।

फ्लोटिंग-पॉइंट त्रुटियाँ और Number.EPSILON द्वारा तुलना

IEEE-754 के कारण, 0.1 + 0.2 !== 0.3 जैसी त्रुटियाँ होती हैं। कठोर तुलना के लिए, अंतर और Number.EPSILON का उपयोग आम है।

1// Floating point precision example and EPSILON comparison
2const sum = 0.1 + 0.2;
3console.log(sum === 0.3);             // false
4
5function nearlyEqual(a, b, epsilon = Number.EPSILON) {
6  return Math.abs(a - b) <= epsilon * Math.max(1, Math.abs(a), Math.abs(b));
7}
8
9console.log(nearlyEqual(sum, 0.3));   // true
  • तुलना में त्रुटियों की अनुमति देने पर, स्केलिंग और पूर्ण (एबसोल्यूट) अंतर का उपयोग करने वाली मजबूत कार्यान्वयन जैसे nearlyEqual की अनुशंसा की जाती है।

पूर्णांक और सुरक्षित पूर्णांक की जांच (isInteger, isSafeInteger)

यह जांचने के लिए एपीआई हैं कि कोई मान पूर्णांक है या नहीं, और क्या वह सुरक्षित पूर्णांक सीमा के भीतर है।

1// Integer and safe integer checks
2console.log(Number.isInteger(3));                 // true
3console.log(Number.isInteger(3.0));               // true
4console.log(Number.isInteger(3.1));               // false
5
6console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER)); // true
7console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1)); // false
  • जब बड़े पूर्णांकों की सटीकता आवश्यक हो, तो जांचने के लिए Number.isSafeInteger का उपयोग करें, और उस सीमा से अधिक संख्याओं के लिए BigInt का विचार करें।

प्रदर्शन और स्वरूपण: toFixed, toPrecision, toString

संख्याओं के प्रदर्शन को नियंत्रित करने के लिए कई विधियाँ उपलब्ध हैं। toFixed निर्दिष्ट दशमलव स्थानों के साथ एक स्ट्रिंग लौटाता है, लेकिन राउंडिंग में सावधानी बरतनी चाहिए।

1// Formatting numbers for display
2const x = 1.23456;
3console.log(x.toFixed(2));         // "1.23"   (string)
4console.log(x.toPrecision(3));     // "1.23"   (string with total significant digits)
5console.log((255).toString(16));   // "ff"     (hexadecimal string)
  • toFixed एक स्ट्रिंग लौटाता है, इसलिए गणना के लिए उन्हें संख्या में बदलने के बाद मानों का ध्यान रखें।

स्ट्रिंग संयोजन और + ऑपरेटर के बारे में सावधानियाँ

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

1// Pitfall with + operator and type coercion
2console.log(1 + 2 + "px");    // "3px"
3console.log("px" + 1 + 2);    // "px12"
4console.log(1 + "2" - 0);     // 3  (string coerced to number for subtraction)
  • जब स्ट्रिंग और संख्याएँ मिलाई जाती हैं, तो अप्रत्यक्ष प्रकार रूपांतरण से बचने के लिए स्पष्ट रूप से String(), Number() या टेम्पलेट लिटरल्स का उपयोग करना अधिक सुरक्षित है।

उन्नत उपयोग के मामले: Number.parseInt / Number.parseFloat, valueOf

Number.parseInt और Number.parseFloat वैश्विक कार्यों के उपनाम (एलियास) हैं। valueOf का उपयोग Number ऑब्जेक्ट से प्रारंभिक मान प्राप्त करने के लिए किया जाता है, लेकिन व्यावहारिक रूप से इसकी कम आवश्यकता होती है।

1// Number.parseInt/parseFloat aliases and valueOf example
2console.log(Number.parseInt("100", 10));   // 100
3console.log(Number.parseFloat("3.14"));    // 3.14
4
5const nObj = new Number(5);
6console.log(nObj.valueOf());               // 5
7console.log(nObj + 1);                     // 6  (object coerced to primitive)
  • Number.parseInt और Number.parseFloat का उपयोग करते समय, रैडिक्स और इनपुट ट्रिमिंग को लेकर सतर्क रहें। रैपर ऑब्जेक्ट्स से आमतौर पर बचा जाता है।

संदर्भ: छोटा यूटिलिटी उदाहरण - संख्या सत्यापन कार्य

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

 1// Small number utility functions
 2function toNumberStrict(value) {
 3  // Return a Number or throw for invalid numeric strings
 4  const n = Number(value);
 5  if (typeof value === "string" && value.trim() === "") {
 6    throw new Error("Empty string is not a valid number");
 7  }
 8  if (Number.isNaN(n)) {
 9    throw new Error(`Invalid number: ${value}`);
10  }
11  return n;
12}
13
14function almostEqual(a, b, eps = Number.EPSILON) {
15  // Robust relative comparison
16  return Math.abs(a - b) <= eps * Math.max(1, Math.abs(a), Math.abs(b));
17}
  • ये अत्यंत बहुमुखी कार्य हैं जिन्हें इनपुट प्रोसेसिंग और तुलना के लिए बार-बार उपयोग किया जा सकता है। त्रुटि फेंकने वाले कार्यान्वयन सत्यापन के लिए उपयोगी होते हैं।

प्रदर्शन और सर्वोत्तम अभ्यास का सारांश

निम्नलिखित बिंदु Number का उपयोग करते समय व्यावहारिक रूप से ध्यान देने योग्य हैं।

  • मूल रूप से, प्रारंभिक number प्रकार का उपयोग करें और new Number() से बचें।
  • आपके उपयोग मामले के अनुसार स्ट्रिंग से संख्या में रूपांतरण के लिए Number() (सख्त) या parseInt/parseFloat (आंशिक निष्कर्षण) में से चुनें।
  • सुरक्षित जांच के लिए Number.isNaN और Number.isFinite का उपयोग करें।
  • फ्लोटिंग-पॉइंट तुलना के लिए, Number.EPSILON का उपयोग करें या एक समर्पित तुलना कार्य बनाएँ।
  • जब पूर्णांक की सटीकता आवश्यक हो, तो Number.isSafeInteger का उपयोग करें, और यदि वह सीमा से बाहर जाए, तो BigInt का उपयोग करें।
  • आप प्रदर्शित करने के लिए गोलाई के लिए toFixed या toPrecision का उपयोग कर सकते हैं, लेकिन ध्यान दें कि लौटाई गई मान एक स्ट्रिंग होती है।

सारांश

Number जावास्क्रिप्ट में सभी संख्याओं के लिए मूल प्रकार है, जिसमें पूर्णांक, दशमलव और विशेष मान (NaN और Infinity) शामिल हैं। प्रकार रूपांतरण और फ्लोटिंग-पॉइंट त्रुटियों के बारे में जागरूक रहना और Number.isNaN तथा Number.EPSILON जैसी विधियों का सही ढंग से उपयोग करना महत्वपूर्ण है। यदि सुरक्षित पूर्णांक सीमा पार हो जाए, तो BigInt का उपयोग करें, और राउंडिंग व प्रदर्शन के लिए toFixed या toPrecision का उपयोग करें।

आप हमारे YouTube चैनल पर Visual Studio Code का उपयोग करके ऊपर दिए गए लेख के साथ आगे बढ़ सकते हैं। कृपया YouTube चैनल को भी देखें।

YouTube Video