प्रश्नोत्तरी: प्रतीक और एन्यूमेरेबल्स
क्या आप ES2015 के कम‑प्रसिद्ध पहलुओं से परिचित हैं?
Quiz: JavaScript Interfaces, Symbols, and Enumerables
- अपनी JavaScript कौशल साबित करें! 🚀
- लॉगिन या साइन‑अप की ज़रूरत नहीं। ✨
- बहुविकल्पीय प्रश्न। 🤖 … कितना मुश्किल हो सकता है, है ना?
आपको एक जावास्क्रिप्ट ऑब्जेक्ट प्रॉपर्टी जिसे गेटर मेथड का उपयोग करता है, कैसे एक्सेस करना चाहिए?
const obj = { get val() { return 'got it!'; }};console.log(obj.val);जावास्क्रिप्ट में, गेटर को सामान्य प्रॉपर्टी की तरह एक्सेस किया जा सकता है। इसे फ़ंक्शन की तरह कॉल करने की ज़रूरत नहीं है।
इस उदाहरण में, obj.val को सीधे एक्सेस करने से गेटर मेथड कॉल हो जाता है और got it! आउटपुट मिलता है।
जावास्क्रिप्ट ऑब्जेक्ट के लिए वास्तव में अद्वितीय प्रॉपर्टी कुंजी बनाने का सही तरीका क्या है?
const uniqueKey = Symbol('myUniqueKey');const obj = { [uniqueKey]: 'unique value'};console.log(obj[uniqueKey]);Symbols अद्वितीय और अपरिवर्तनीय प्रिमिटिव टाइप हैं जिन्हें ऑब्जेक्ट प्रॉपर्टियों की कुंजियों के रूप में उपयोग किया जा सकता है। यह नाम टकराव से बचने में मदद करता है, विशेष रूप से बड़े कोडबेस में या पुन: उपयोग योग्य लाइब्रेरी लिखते समय।
क्या age प्रॉपर्टी for...in इटरेशन के दौरान सूचीबद्ध होगी?
const person = {};Object.defineProperty(person, 'age', { value: 25, enumerable: true});for (let key in person) { console.log(key);}Object.defineProperty() में enumerable प्रॉपर्टी यह नियंत्रित करती है कि प्रॉपर्टी for...in जैसी एनेमरेशन मेथड्स में दिखाई देगी या नहीं। इस उदाहरण में, क्योंकि enumerable: true है, age प्रॉपर्टी इटरेशन के दौरान सूचीबद्ध होगी।
Object.defineProperty() का उपयोग करते समय यदि enumerable निर्दिष्ट नहीं किया गया हो तो किसी प्रॉपर्टी की डिफ़ॉल्ट एनेमरेबिलिटी क्या होती है?
const car = {};Object.defineProperty(car, 'make', { value: 'Toyota'});console.log(Object.keys(car));जब आप Object.defineProperty() का उपयोग enumerable निर्दिष्ट किए बिना करते हैं, तो इसका डिफ़ॉल्ट मान false होता है। इसका मतलब है कि make प्रॉपर्टी Object.keys() या अन्य एनेमरेशन मेथड्स में दिखाई नहीं देगी।
निम्न तुलना का परिणाम क्या होगा?
const sym1 = Symbol('id');const sym2 = Symbol('id');console.log(sym1 === sym2);Symbol() का प्रत्येक कॉल एक अद्वितीय और अपरिवर्तनीय मान बनाता है, भले ही विवरण समान हो। इस मामले में, sym1 और sym2 अलग-अलग प्रतीक हैं, इसलिए तुलना false लौटाती है।
क्या Symbol‑की वाली प्रॉपर्टी for...in इटरेशन के दौरान सूचीबद्ध होगी?
const sym = Symbol('uniqueKey');const obj = { [sym]: 'symbol value', regularKey: 'regular value'};for (let key in obj) { console.log(key);}Symbol‑की वाली प्रॉपर्टी का अपना enumerable फ़्लैग हो सकता है, लेकिन for...in और Object.keys() केवल स्ट्रिंग‑की वाली enumerable प्रॉपर्टी को ही देखते हैं। इस उदाहरण में केवल regularKey सूचीबद्ध होगा, Symbol‑की वाली प्रॉपर्टी नहीं।
कौन‑सी विधि का उपयोग करके किसी वस्तु की सभी Symbol कुंजियों को प्राप्त किया जा सकता है?
Object.getOwnPropertySymbols() मेथड का उपयोग वस्तु की अपनी Symbol प्रॉपर्टी कुंजियों को प्राप्त करने के लिए किया जाता है।
const sym1 = Symbol('id');const sym2 = Symbol('name');const obj = { [sym1]: 'symbol value', [sym2]: 'another symbol value'};console.log(Object.getOwnPropertySymbols(obj));// [Symbol(id), Symbol(name)]