ऑब

ऑब्जेक्ट में JavaScript

18 अभ्यास

ऑब्जेक्ट के बारे में

व्याख्या

number और string जैसे प्रिमिटिव डेटा टाइप के अलावा JavaScript में एक और महत्वपूर्ण डेटा टाइप होता है, जिसे object कहा जाता है। ऑब्जेक्ट की-वैल्यू जोड़ों का संग्रह होते हैं। इसलिए इन्हें उस चीज़ की तरह इस्तेमाल किया जा सकता है जिसे दूसरी भाषाओं में अक्सर मैप या डिक्शनरी कहा जाता है।

दूसरी भाषाओं में किसी मैप की सारी वैल्यू अक्सर एक ही डेटा टाइप की होनी चाहिए। JavaScript में सिर्फ की का टाइप सीमित होता है: वह स्ट्रिंग होनी चाहिए। एक ही ऑब्जेक्ट के अंदर की वैल्यू अलग-अलग टाइप की हो सकती हैं। वे संख्या जैसे प्रिमिटिव टाइप के हो सकते हैं, लेकिन ऐरे, दूसरे ऑब्जेक्ट या फंक्शन भी हो सकते हैं। इसी वजह से ऑब्जेक्ट बहुत बहुमुखी होते हैं और JavaScript में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) की मुख्य इकाइयाँ भी हैं।

आगे हम ऑब्जेक्ट को संग्रह या मैप के रूप में देखेंगे। ऑब्जेक्ट के दूसरे इस्तेमाल के मामले दूसरे कॉन्सेप्ट में बताए जाएँगे, जैसे क्लास।

ऑब्जेक्ट बनाना

आप कर्ली ब्रैकेट इस्तेमाल करके एक ऑब्जेक्ट लिटरल बनाते हैं। आप सीधे कुछ एंट्री (की-वैल्यू जोड़े) भी शामिल कर सकते हैं। इसके लिए पहले की लिखिए, उसके बाद कोलन और फिर वैल्यू।

const emptyObject = {};

const obj = {
  favoriteNumber: 42,
  greeting: 'Hello World',
  useGreeting: true,
  address: {
    street: 'Trincomalee Highway',
    city: 'Batticaloa',
  },
  fruits: ['melon', 'papaya'],
  addNumbers: function (a, b) {
    return a + b;
  },
};

JavaScript में अंतिम एंट्री के बाद वाला कॉमा वैकल्पिक होता है। इसके इस्तेमाल के फायदों के बारे में आप यहाँ पढ़ सकते हैं।

आपको हैरानी हो सकती है कि की को उद्धरण चिह्नों में क्यों नहीं लपेटा गया, जबकि उन्हें स्ट्रिंग होना चाहिए। यह एक शॉर्टहैंड नोटेशन है। अगर की JavaScript के आइडेंटिफायर के नामकरण नियमों का पालन करती है, तो आप उद्धरण चिह्न छोड़ सकते हैं। जिन की के नाम में विशेष अक्षर हों, उनके लिए सामान्य स्ट्रिंग नोटेशन इस्तेमाल करना पड़ता है।

const obj = {
  '1keyStartsWithNumber': '...',
  'key/with/slashes': '...',
  'key-with-dashes': '...',
  'key with spaces': '...',
  '#&()[]{}èä樹keyWithSpecialChars': '...',
};

अक्सर ऑब्जेक्ट घोषित करते समय आप पहले से मौजूद वेरिएबल जोड़ना चाहेंगे। इससे अक्सर name: name जैसे की-वैल्यू जोड़े बन जाते हैं। JavaScript में एक शॉर्टहैंड नोटेशन है, जिसमें आप सिर्फ name लिख सकते हैं। ऑब्जेक्ट में फंक्शन बनाने के लिए भी एक शॉर्टहैंड नोटेशन है। इसमें आप कोलन और function कीवर्ड छोड़ सकते हैं।

const x = 1;
const y = 2;

const obj = {
  x: x,
  y: y,
  calcSum: function (a, b) {
    return a + b;
  },
};

// Can be shortened to ...
const obj = {
  x,
  y,
  calcSum(a, b) {
    return a + b;
  },
};

अगर आप ऐसा ऑब्जेक्ट लिटरल बनाना चाहते हैं जिसमें की का नाम किसी वेरिएबल में संग्रहीत हो या किसी एक्सप्रेशन से निकाला गया हो, तो उस वेरिएबल या एक्सप्रेशन को चौकोर ब्रैकेट में लपेटना पड़ता है।

const key = 'greeting';

const obj = {
  [key]: 'hello world',
};
console.log(obj);
// => { greeting: 'hello world' }

वैल्यू प्राप्त करना

किसी दी गई की की वैल्यू प्राप्त करने के दो तरीके हैं: डॉट नोटेशन और ब्रैकेट नोटेशन।

const obj = { greeting: 'hello world' };

obj.greeting;
// => hello world

obj['greeting'];
// => hello world

// Bracket notation also works with variables.
const key = 'greeting';
obj[key];
// => hello world

शॉर्टहैंड के तौर पर डॉट नोटेशन इस्तेमाल करने पर वही सीमा लागू होती है जो उद्धरण चिह्न छोड़ने पर होती है। यह तभी काम करता है जब की आइडेंटिफायर के नामकरण नियमों का पालन करती हो।

अगर आप ऐसी की प्राप्त करने की कोशिश करते हैं जो ऑब्जेक्ट में मौजूद नहीं है, तो JavaScript undefined लौटाता है। इस पर और जानकारी के लिए Null and Undefined देखिए।

अगर आप किसी नेस्टेड ऑब्जेक्ट से वैल्यू प्राप्त करना चाहते हैं, तो आप की को चेन कर सकते हैं।

const obj = {
  address: {
    street: 'Trincomalee Highway',
    city: 'Batticaloa',
  },
};

obj.address.city;
// => 'Batticaloa'

obj['address']['city'];
// => 'Batticaloa'

// Notations can also be mixed.
obj.address['city'];
// => 'Batticaloa'

वैल्यू जोड़ना या बदलना

आप असाइनमेंट ऑपरेटर = इस्तेमाल करके वैल्यू जोड़ या बदल सकते हैं। यहाँ भी डॉट और ब्रैकेट नोटेशन उपलब्ध हैं।

const obj = { greeting: 'hello world' };

obj.greeting = 'Hi there!';
obj['greeting'] = 'Welcome.';

obj.newKey1 = 'new value 1';
obj['new key 2'] = 'new value 2';

const key = 'new key 3';
obj[key] = 'new value 3';

एंट्री हटाना

आप delete कीवर्ड इस्तेमाल करके किसी ऑब्जेक्ट से की-वैल्यू जोड़ा हटा सकते हैं।

const obj = {
  key1: 'value1',
  key2: 'value2',
};

delete obj.key1;
delete obj['key2'];

ध्यान दीजिए कि गैर-मौजूद की के लिए undefined लौटाया जाता है, लेकिन किसी की को undefined सेट करने पर एंट्री हटती नहीं है। इसके बजाय हमेशा delete इस्तेमाल कीजिए।

की मौजूद है या नहीं, यह जाँचना

आप hasOwnProperty मेथड से जाँच सकते हैं कि कोई की ऑब्जेक्ट में मौजूद है या नहीं।

const obj = { greeting: 'hello world' };

obj.hasOwnProperty('greeting');
// => true

obj.hasOwnProperty('age');
// => false

hasOwnProperty इनहेरिटेंस से मिली की के लिए false लौटाता है। आम तौर पर यही व्यवहार चाहिए होता है। अगर आप मौजूदगी की जाँच में इनहेरिट किए गए की भी शामिल करना चाहते हैं, तो इसके बजाय in ऑपरेटर इस्तेमाल कर सकते हैं।

ऑब्जेक्ट पर लूप चलाना

किसी ऑब्जेक्ट की सारी की पर इटरेशन करने के लिए एक खास for...in लूप होता है।

const obj = {
  name: 'Ali',
  age: 65,
};

for (let key in obj) {
  console.log(key, obj[key]);
}
// name Ali
// age 65

ऐसा लग सकता है कि for...in हमेशा की को उस क्रम में देखता है जिसमें वे दिखती हैं या ऑब्जेक्ट में जोड़ी गई थीं (इंसर्शन ऑर्डर)। फिर भी, आपको इस पर भरोसा नहीं करना चाहिए, क्योंकि कुछ खास मामलों में यह क्रम इंसर्शन ऑर्डर से अलग हो सकता है। अपना कोड हमेशा ऐसे लिखिए जैसे क्रम कुछ भी हो सकता है। अगर आपको भरोसेमंद क्रम चाहिए, तो ऑब्जेक्ट के बजाय Map या नेस्टेड [ऐरे][concept-arrays] इस्तेमाल कीजिए।

for…in लूप में एक आम गलती की गुंजाइश रहती है, अगर ऑब्जेक्ट में इनहेरिटेंस से मिली की मौजूद हों। उन पर भी for…in लूप चलता है। आम तौर पर आप इसे टालना चाहेंगे, इसलिए आपको उन की को छोड़ना पड़ेगा, जैसा नीचे दिखाया गया है।

for (let key in obj) {
  if (!obj.hasOwnProperty(key)) {
    continue;
  }
  // ...
}

JavaScript में for...of लूप भी होता है, जैसे ऐरे पर इटरेशन करने के लिए। यह ध्यान रखना ज़रूरी है कि for...in और for...of एक-दूसरे की जगह इस्तेमाल नहीं किए जा सकते। इस पर विस्तार से जानने के लिए MDN डॉक्युमेंटेशन देखिए।

की, वैल्यू और एंट्री

बिल्ट-इन ऑब्जेक्ट Object कुछ हेल्पर मेथड देता है, जिनसे आप किसी दिए गए ऑब्जेक्ट की सारी की, वैल्यू या एंट्री ऐरे के रूप में प्राप्त कर सकते हैं।

const obj = {
  name: 'Ali',
  age: 65,
};

Object.keys(obj);
// => [ 'name', 'age' ]

Object.values(obj);
// => [ 'Ali', 65 ]

Object.entries(obj);
// => [ [ 'name', 'Ali' ], [ 'age', 65 ] ]

बिल्कुल खाली ऑब्जेक्ट

आपने देखा होगा कि JavaScript में एक खाली ऑब्जेक्ट पूरी तरह खाली नहीं होता। उदाहरण के लिए, उसमें hasOwnProperty मेथड और toString जैसे दूसरे मेथड मौजूद रहते हैं। आम तौर पर इससे कोई दिक्कत नहीं होती, लेकिन अगर आपको कभी बिल्कुल खाली ऑब्जेक्ट बनाना हो, तो नल ऑब्जेक्ट इस्तेमाल कीजिए, जिसे Object.create(null) से बनाया जा सकता है।

GitHub के ज़रिए संपादित करें यह लिंक नई विंडो या टैब में खुलता है।

ऑब्जेक्ट सीखिए