जावास्क्रिप्ट का विकास जारी है, और ईएस13 (ईसीएमएस्क्रिप्ट 2022) की शुरूआत के साथ, कई नई विशेषताएं हैं जिनके बारे में डेवलपर्स को अधिक कुशल और आधुनिक कोड लिखने के लिए जागरूक होना चाहिए। इस लेख में, हम ES13 की दस सबसे प्रभावशाली विशेषताओं के बारे में जानेंगे जो आपके विकास कार्यप्रवाह को बेहतर बना सकती हैं।
पहले, आप केवल async फ़ंक्शंस के अंदर wait का उपयोग कर सकते थे। इसका मतलब यह था कि यदि आपको प्रतीक्षा का उपयोग करने की आवश्यकता है, तो आपको अपना कोड एक एसिंक फ़ंक्शन के अंदर लपेटना होगा, भले ही आपके बाकी मॉड्यूल को इसकी आवश्यकता न हो।
// Without top-level await (Before ES13) async function fetchData() { const data = await fetch('/api/data'); return data.json(); } fetchData().then(console.log);
ES13 के साथ, अब आप अपने मॉड्यूल के शीर्ष स्तर पर wait का उपयोग कर सकते हैं, जिससे अतिरिक्त async रैपर फ़ंक्शन की आवश्यकता समाप्त हो जाएगी।
// With top-level await (ES13) const data = await fetch('/api/data'); console.log(await data.json());
ES13 से पहले, जावास्क्रिप्ट कक्षाओं में वास्तविक निजी फ़ील्ड या विधियाँ नहीं थीं। गोपनीयता को अनुकरण करने के लिए डेवलपर्स अक्सर अंडरस्कोर या क्लोजर जैसी नामकरण परंपराओं का उपयोग करते थे, लेकिन ये विधियां वास्तव में निजी नहीं थीं।
// Simulating private fields (Before ES13) class Person { constructor(name) { this._name = name; // Conventionally "private" } _getName() { return this._name; } greet() { return `Hello, ${this._getName()}!`; } } const john = new Person('John'); console.log(john._getName()); // Accessible, but intended to be private
ES13 # उपसर्ग का उपयोग करके वास्तविक निजी इंस्टेंस विधियों और एक्सेसर्स का परिचय देता है, यह सुनिश्चित करते हुए कि उन्हें कक्षा के बाहर एक्सेस नहीं किया जा सकता है।
// Private instance methods and fields (ES13) class Person { #name = ''; constructor(name) { this.#name = name; } #getName() { return this.#name; } greet() { return `Hello, ${this.#getName()}!`; } } const john = new Person('John'); console.log(john.greet()); // Hello, John! console.log(john.#getName()); // Error: Private field '#getName' must be declared in an enclosing class
ES13 से पहले, स्थिर फ़ील्ड और विधियों को आम तौर पर क्लास बॉडी के बाहर परिभाषित किया जाता था, जिससे कम सुसंगत कोड होता था।
// Static fields outside class body (Before ES13) class MathUtilities {} MathUtilities.PI = 3.14159; MathUtilities.calculateCircumference = function(radius) { return 2 * MathUtilities.PI * radius; }; console.log(MathUtilities.PI); // 3.14159 console.log(MathUtilities.calculateCircumference(5)); // 31.4159
ES13 आपको सीधे क्लास बॉडी के भीतर स्थिर क्षेत्रों और विधियों को परिभाषित करने की अनुमति देता है, जिससे पठनीयता और संगठन में सुधार होता है।
// Static fields and methods inside class body (ES13) class MathUtilities { static PI = 3.14159; static calculateCircumference(radius) { return 2 * MathUtilities.PI * radius; } } console.log(MathUtilities.PI); // 3.14159 console.log(MathUtilities.calculateCircumference(5)); // 31.4159
लॉजिकल ऑपरेटर्स (&&, ||, ??) और असाइनमेंट को अक्सर वर्बोज़ स्टेटमेंट्स में मैन्युअल रूप से जोड़ा जाता था, जिससे अधिक जटिल कोड बनता था।
// Manually combining logical operators and assignment (Before ES13) let a = 1; let b = 0; a = a && 2; // a = 2 b = b || 3; // b = 3 let c = null; c = c ?? 4; // c = 4 console.log(a, b, c); // 2, 3, 4
ES13 तार्किक असाइनमेंट ऑपरेटरों का परिचय देता है, जो संक्षिप्त सिंटैक्स में असाइनमेंट के साथ तार्किक संचालन को जोड़ता है।
// Logical assignment operators (ES13) let a = 1; let b = 0; a &&= 2; // a = a && 2; // a = 2 b ||= 3; // b = b || 3; // b = 3 let c = null; c ??= 4; // c = c ?? 4; // c = 4 console.log(a, b, c); // 2, 3, 4
जावास्क्रिप्ट में कमजोर संदर्भ और फाइनलाइज़र मूल रूप से समर्थित नहीं थे, जिससे कुछ मामलों में संसाधनों का प्रबंधन करना मुश्किल हो गया, खासकर बड़े पैमाने के अनुप्रयोगों के साथ जो महंगी वस्तुओं को संभालते हैं।
// No native support for weak references (Before ES13) // Developers often had to rely on complex workarounds or external libraries.
ES13 ने WeakRef और फाइनलाइज़ेशनरजिस्ट्री की शुरुआत की, जो कचरा संग्रहण के बाद कमजोर संदर्भों और सफाई कार्यों के लिए मूल समर्थन प्रदान करता है।
// WeakRefs and FinalizationRegistry (ES13) let obj = { name: 'John' }; const weakRef = new WeakRef(obj); console.log(weakRef.deref()?.name); // 'John' obj = null; // obj is eligible for garbage collection setTimeout(() => { console.log(weakRef.deref()?.name); // undefined (if garbage collected) }, 1000); const registry = new FinalizationRegistry((heldValue) => { console.log(`Cleanup: ${heldValue}`); }); registry.register(obj, 'Object finalized');
यह जांचना कि क्या किसी ऑब्जेक्ट में निजी फ़ील्ड है, सीधा नहीं था, क्योंकि निजी फ़ील्ड मूल रूप से समर्थित नहीं थे। डेवलपर्स को वैकल्पिक तरीकों पर निर्भर रहना पड़ता था, जैसे सार्वजनिक संपत्तियों की जांच करना या इंस्टेंसऑफ़ चेक का उपयोग करना।
// Checking for private fields using workarounds (Before ES13) class Car { constructor() { this.engineStarted = false; // Public field } startEngine() { this.engineStarted = true; } static isCar(obj) { return obj instanceof Car; // Not reliable for truly private fields } } const myCar = new Car(); console.log(Car.isCar(myCar)); // true
ES13 के साथ, अब आप # सिंटैक्स का उपयोग करके सीधे जांच सकते हैं कि किसी ऑब्जेक्ट में निजी फ़ील्ड है या नहीं, जिससे यह आसान और अधिक विश्वसनीय हो जाता है।
// Ergonomic brand checks for private fields (ES13) class Car { #engineStarted = false; startEngine() { this.#engineStarted = true; } static isCar(obj) { return #engineStarted in obj; } } const myCar = new Car(); console.log(Car.isCar(myCar)); // true
एक सूचकांक के साथ ब्रैकेट नोटेशन का उपयोग करके सरणी से तत्वों तक पहुंच, और नकारात्मक सूचकांकों के लिए, आपको मैन्युअल रूप से स्थिति की गणना करनी होगी।
// Accessing array elements (Before ES13) const arr = [1, 2, 3, 4, 5]; console.log(arr[arr.length - 1]); // 5 (last element)
at() विधि आपको सकारात्मक और नकारात्मक दोनों सूचकांकों का अधिक सहजता से उपयोग करके सरणी तत्वों तक पहुंचने की अनुमति देती है।
// Accessing array elements with `at()` (ES13) const arr = [1, 2, 3, 4, 5]; console.log(arr.at(-1)); // 5 (last element) console.log(arr.at(0)); // 1 (first element)
यह जांचने के लिए कि क्या किसी ऑब्जेक्ट की अपनी संपत्ति है (विरासत में नहीं मिली है), डेवलपर्स आमतौर पर object.prototype.hasOwnProperty.call() या obj.hasOwnProperty() का उपयोग करते हैं।
// Checking own properties (Before ES13) const obj = { a: 1 }; console.log(Object.prototype.hasOwnProperty.call(obj, 'a')); // true console.log(obj.hasOwnProperty('a')); // true
नई ऑब्जेक्ट.हैसओन() विधि इस जांच को सरल बनाती है, अधिक संक्षिप्त और पठनीय वाक्यविन्यास प्रदान करती है।
// Checking own properties with `Object.hasOwn()` (ES13) const obj = { a: 1 }; console.log(Object.hasOwn(obj, 'a')); // true
कुंजी-मूल्य जोड़े (उदाहरण के लिए, मानचित्र या सरणी से) को किसी ऑब्जेक्ट में बदलने के लिए लूपिंग और मैन्युअल निर्माण की आवश्यकता होती है।
// Creating an object from entries (Before ES13) const entries = [['name', 'John'], ['age', 30]]; const obj = {}; entries.forEach(([key, value]) => { obj[key] = value; }); console.log(obj); // { name: 'John', age: 30 }
Object.fromEntries() कुंजी-मूल्य जोड़े से ऑब्जेक्ट के निर्माण को सरल बनाता है।
// Creating an object with `Object.fromEntries()` (ES13) const entries = [['name', 'John'], ['age', 30]]; const obj = Object.fromEntries(entries); console.log(obj); // { name: 'John', age: 30 }
मॉड्यूल के शीर्ष स्तर में इसका मूल्य अपरिभाषित था, जिससे स्क्रिप्ट से मॉड्यूल में कोड पोर्ट करते समय भ्रम पैदा होता था।
// Global `this` (Before ES13) console.log(this); // undefined in modules, global object in scripts
ES13 स्पष्ट करता है कि मॉड्यूल के शीर्ष स्तर पर इसका मूल्य हमेशा अपरिभाषित होता है, जो मॉड्यूल और स्क्रिप्ट के बीच स्थिरता प्रदान करता है।
// Global `this` in modules (ES13) console.log(this); // undefined
ये ES13 सुविधाएं आपके जावास्क्रिप्ट कोड को अधिक कुशल, पठनीय और रखरखाव योग्य बनाने के लिए डिज़ाइन की गई हैं। इन्हें अपनी विकास प्रथाओं में एकीकृत करके, आप आधुनिक, निष्पादन योग्य एप्लिकेशन बनाने के लिए भाषा में नवीनतम प्रगति का लाभ उठा सकते हैं।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3