प्रॉपर्टी ऐक्सेसर

किसी ऑब्जेक्ट की प्रॉपर्टी को सेट करने, बदलने, और ऐक्सेस करने के दो तरीके हैं: डॉट नोटेशन और ब्रैकेट नोटेशन.

डॉट नोटेशन

जैसा कि कुछ पिछले उदाहरणों में दिखाया गया है, डॉट नोटेशन एक विराम चिह्न (.) का इस्तेमाल ऑब्जेक्ट और प्रॉपर्टी कुंजी को ऐक्सेस किया जा रहा है:

const myObj = {
    "myProp": "String value."
};

myObj.myProp;
> "String value."

डॉट नोटेशन का इस्तेमाल करके नई प्रॉपर्टी ऐक्सेस की जा सकती हैं, उनमें बदलाव किया जा सकता है या उन्हें बनाया जा सकता है असाइनमेंट ऑपरेटर:

const myObj = {};

myObj.myProp = "String value.";

myObj;
> Object { myProp: "String value." }

डॉट नोटेशन का इस्तेमाल करके प्रॉपर्टी की चेन बनाने से, आपको ऐसे ऑब्जेक्ट जो किसी ऑब्जेक्ट की प्रॉपर्टी हैं:

const myObj = {
    "myProp": {
            "childProp" : true
    }
};

myObj.myProp.childProp;
> true;

हालांकि, इस सिंटैक्स का इस्तेमाल उस समय होना चाहिए जब चेन में बताई गई कोई कुंजी तय करने से गड़बड़ियां हो सकती हैं. नीचे दिए गए उदाहरण में, myMissingProp प्रॉपर्टी myObj ऑब्जेक्ट की है, इसलिए myObj.myMissingProp को ऐक्सेस करने की कोशिश की जा रही है undefined में नतीजे मिले. undefined पर किसी प्रॉपर्टी को ऐक्सेस करने की कोशिश की जा रही हो यह कोई ऑब्जेक्ट था, जिसकी वजह से गड़बड़ी हुई:

const myObj = {
    "myProp": {
            "childProp" : true
    }
};

> myObj.myMissingProp
> undefined

myObj.myMissingProp.childProp;
> Uncaught TypeError: myObj.myMissingProp is undefined

इस समस्या को हल करने के लिए, ES2020 ने "वैकल्पिक चेनिंग ऑपरेटर" लॉन्च किया ?. का इस्तेमाल करें.

const myObj = {
    "myProp": {
            "childProp" : true
    }
};

myObj.myMissingProp?.childProp;
> undefined

डॉट नोटेशन का इस्तेमाल करके ऐक्सेस की जाने वाली कुंजियां, स्ट्रिंग जैसे कोटेशन मार्क के अंदर नहीं होती हैं लिटरल होते हैं. इसका मतलब है कि सिर्फ़ प्रॉपर्टी बटन ऐक्सेस करने के लिए, डॉट नोटेशन का इस्तेमाल किया जा सकता है जो मान्य आइडेंटिफ़ायर हों:

const myObj = {
    "1": true,
    "key with spaces": true
};

myObj.1;
> Uncaught SyntaxError: unexpected token: numeric literal

myObj.key with spaces;
> Uncaught SyntaxError: unexpected token: keyword 'with'

इस वजह से, आइडेंटिफ़ायर के नियमों का पालन करना सबसे सही तरीका है ध्यान दें. अगर किसी अगर एक और वैल्यू दी गई है, तो वैकल्पिक ब्रैकेट नोटेशन सिंटैक्स का इस्तेमाल करके, स्ट्रिंग-आधारित ऑब्जेक्ट कुंजियां जो आइडेंटिफ़ायर के नियमों का पालन नहीं करती हैं.

ब्रैकेट नोटेशन

ब्रैकेट नोटेशन, ब्रैकेट ([]) के सेट का इस्तेमाल करता है. इसमें ऐसी वैल्यू होती है जिससे आकलन होता है प्रॉपर्टी कुंजी का उपयोग करें.

const myObj = {
    "myProp": "String value."
};

myObj["myProp"];
> "String value."

यह सिंटैक्स काफ़ी हद तक ज़्यादा आसान और अनुमति देने वाला है क्योंकि ब्रैकेट में दी गई वैल्यू का आकलन, स्ट्रिंग की लिटरल वैल्यू के तौर पर किया जाता है फिर चाहे उसका डेटा टाइप कुछ भी हो. उदाहरण के लिए, यहां बूलियन वैल्यू false और स्ट्रिंग से जुड़ी प्रॉपर्टी को ऐक्सेस करने के लिए, संख्या मान 10 का इस्तेमाल किया जाता है "false" और "10" लिटरल बटन

const myObj = {
    "false": 25,
    "10" : true,
    "key with spaces": true
};

myObj[false];
> 25

myObj[10];
> true

myObj["key with spaces"];
> true

इस सिंटैक्स की क्षमता अपने लचीलेपन में है, जिससे प्रॉपर्टी ऐक्सेस करने के लिए, डाइनैमिक तरीके से बनाई गई स्ट्रिंग. नीचे दिए गए उदाहरण में ऑब्जेक्ट की तीन प्रॉपर्टी में से किसी एक को चुनने के लिए रैंडम नंबर:

const colors = {
    "color1" : "red",
    "color2" : "blue",
    "color3" : "green"
};
const randomNumber = Math.ceil( Math.random() * 3 );

colors[ "color" + randomNumber ];
> "blue"

डॉट नोटेशन की तरह ही, ब्रैकेट नोटेशन का इस्तेमाल नया डेटा ऐक्सेस करने और नया खाता बनाने, दोनों के लिए किया जा सकता है प्रॉपर्टी पर काम करने के लिए: असाइनमेंट ऑपरेटर का इस्तेमाल करके:

const myObj = {};

myObj[ "myProp" ] = "String value.";

myObj;
> Object { myProp: "String value." }