هناك طريقتان لضبط سمات عنصر وتغييرها والوصول إليها: طريقة الترميز بالنقاط وطريقة الترميز بالأقواس.
الترميز النقطي
كما هو موضح في بعض الأمثلة السابقة، يستخدم الترميز النقطي نقطة (.
) بين
ومفتاح السمة الذي يتم الوصول إليه:
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." }