لوازم جانبی املاک

دو راه برای تنظیم، تغییر و دسترسی به ویژگی‌های یک شی وجود دارد: نماد نقطه و نماد براکت .

همانطور که در برخی از مثال های قبلی مشاهده شد، نماد نقطه از نقطه ( . ) بین یک شی و کلید خصوصیت مورد دسترسی استفاده می کند:

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