أدوات الوصول إلى العقارات

هناك طريقتان لضبط خصائص الكائن وتغييرها والوصول إليها: تدوين النقاط وتدوين الأقواس.

كما هو موضح في بعض الأمثلة السابقة، يستخدم الترميز النقطي نقطة (.) بين ومفتاح السمة الذي يتم الوصول إليه:

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