একটি বস্তুর বৈশিষ্ট্য নির্ধারণ, পরিবর্তন এবং অ্যাক্সেস করার দুটি উপায় রয়েছে: ডট নোটেশন এবং ব্র্যাকেট নোটেশন ।
ডট নোটেশন
আগের কিছু উদাহরণে দেখা গেছে, ডট নোটেশন একটি অবজেক্ট এবং প্রপার্টি কী অ্যাক্সেস করার মধ্যে একটি সময়কাল ( .
ব্যবহার করে:
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." }