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

هناك طريقتان لضبط سمات عنصر وتغييرها والوصول إليها: طريقة الترميز بالنقاط وطريقة الترميز بالأقواس.

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

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