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

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

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

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." }