2025 में जावास्क्रिप्ट: व्यवहार में क्या नया है
\n\nजावास्क्रिप्ट की दुनिया स्थिर नहीं है। 2025 तक, भाषा ने एक महत्वपूर्ण छलांग लगाई है, जो डेवलपर्स को अधिक कुशल, सुरक्षित और पठनीय एप्लिकेशन बनाने के लिए शक्तिशाली उपकरण प्रदान करती है। इस लेख में, हम Node.js के लिए व्यावहारिक उदाहरणों के साथ ECMAScript 2025 की प्रमुख नई सुविधाओं का विश्लेषण करेंगे। आप जानेंगे कि कैसे Temporal API तिथियों के साथ काम करने की समस्या को हल करता है, कैसे डेकोरेटर मेटाप्रोग्रामिंग को सरल बनाते हैं, और कौन से एसिंक्रोनस पैटर्न डी-फैक्टो मानक बन गए हैं।
\n\n1. Temporal API: बिना सिरदर्द के तिथियों और समय के साथ काम करना
\n\nलंबे समय से प्रतीक्षित पुराने Date का प्रतिस्थापन अंततः स्थिर हो गया है। Temporal API अपरिवर्तनीय ऑब्जेक्ट, टाइम ज़ोन और कैलेंडर के लिए समर्थन, साथ ही मानव-पठनीय विधियाँ प्रदान करता है।
पार्सिंग और फ़ॉर्मेटिंग के लिए वर्कअराउंड लिखने के बजाय, अब आप अंतर्निहित फ़ंक्शन का उपयोग कर सकते हैं:
\n\nconst { Temporal } = require('@js-temporal/polyfill'); // Node.js < 22 के लिए\n\n// तिथि बनाना\nconst now = Temporal.Now.plainDateISO();\nconsole.log(now.toString()); // "2025-03-15"\n\n// समय के साथ काम करना\nconst meeting = Temporal.PlainTime.from('14:30');\nconst updatedMeeting = meeting.add({ hours: 1, minutes: 15 });\nconsole.log(updatedMeeting.toString()); // "15:45"\n\n// टाइम ज़ोन\nconst zoned = Temporal.ZonedDateTime.from({\n timeZone: 'Europe/Moscow',\n year: 2025,\n month: 12,\n day: 25,\n hour: 10\n});\nconsole.log(zoned.toInstant().epochMilliseconds); // 1735544400000\n\n// अवधियों की तुलना\nconst duration1 = Temporal.Duration.from({ days: 5 });\nconst duration2 = Temporal.Duration.from({ days: 10 });\nconsole.log(Temporal.Duration.compare(duration1, duration2)); // -1\n\n\nयह क्यों महत्वपूर्ण है? Temporal परिवर्तनशीलता (प्रत्येक विधि एक नया ऑब्जेक्ट लौटाती है) और टाइम ज़ोन के साथ भ्रम की समस्याओं को हल करता है, जो Node.js पर सर्वर एप्लिकेशन के लिए महत्वपूर्ण है।
\n\n2. डेकोरेटर: मेटाप्रोग्रामिंग का मानकीकरण
\n\nडेकोरेटर, जो लंबे समय से TypeScript की एक प्रायोगिक सुविधा थी, अंततः ECMAScript 2025 मानक में शामिल हो गए हैं। वे कक्षाओं, विधियों और गुणों में आसानी से तर्क जोड़ने की अनुमति देते हैं।
\n\nअब आप बिना किसी तृतीय-पक्ष लाइब्रेरी के स्वच्छ और पुन: प्रयोज्य डेकोरेटर बना सकते हैं:
\n\n// विधि कॉल को लॉग करने के लिए डेकोरेटर\nfunction log(target, context) {\n const methodName = String(context.name);\n const originalMethod = target;\n\n return function (...args) {\n console.log(`[LOG] ${methodName} को तर्कों के साथ कॉल किया गया:`, args);\n const result = originalMethod.apply(this, args);\n console.log(`[LOG] ${methodName} का परिणाम:`, result);\n return result;\n };\n}\n\nclass OrderService {\n @log\n createOrder(userId, items) {\n // व्यावसायिक तर्क\n return { id: Date.now(), userId, items };\n }\n}\n\nconst service = new OrderService();\nservice.createOrder(123, ['item1', 'item2']);\n// [LOG] createOrder को तर्कों के साथ कॉल किया गया: [ 123, [ 'item1', 'item2' ] ]\n// [LOG] createOrder का परिणाम: { id: 1742030400000, userId: 123, items: [ 'item1', 'item2' ] }\n\n\nडेकोरेटर माइक्रोसर्विस आर्किटेक्चर में कैशिंग, सत्यापन, प्राधिकरण और निगरानी के लिए आदर्श हैं।
\n\n3. बेहतर एसिंक्रोनस और समानांतरता पैटर्न
\n\n2025 में, जावास्क्रिप्ट को समानांतर कार्यों के साथ काम करने के लिए मूल साधन प्राप्त हुए, जिनके लिए पहले मैन्युअल प्रॉमिस प्रबंधन या तृतीय-पक्ष लाइब्रेरी की आवश्यकता होती थी।
\n\n3.1. Promise.withResolvers()
\nयह विधि उन प्रॉमिस को बनाना सरल बनाती है जो बाहर से हल किए जाते हैं। पहले, इसके लिए क्लोजर में वेरिएबल बनाने की आवश्यकता होती थी:
\n\n// पुराना तरीका\nfunction createDeferred() {\n let resolve, reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\n\n// नया तरीका (ECMAScript 2025)\nconst { promise, resolve, reject } = Pro