ویژگیهای آبجکت
لیترال را نوشتهاید و با نقطه هم به فیلد رسیدهاید. از اینجا خودِ داده تکان میخورد: خریدار رنگ را انتخاب میکند و ویژگی تازهای سر میرسد، با ذخیره پرچم پیشنویس میرود، و شهر داخل نشانی میماند. این صفحه همان رفتوآمد روزمره با ویژگیهاست.
بعد از اولین لیترال
صفحهٔ آبجکتها کیسه را ساخت و یک فیلد را خواند. اینجا دست روی «کدام کلیدها هستند» میگذارید: نامی که نبود را میآورید، نامی که دیگر لازم نیست را برمیدارید، میپرسید این نام هست یا نه، داخل آبجکتی که خودش درون دیگری است قدم میگذارید، و نامهایی را که واقعاً نگه داشتهاید فهرست میکنید.
پنج حرکت روی ویژگی
📊 افزودن، حذف، آزمون، تو در تو، فهرست
| حرکت | نحو | چه به دست میآید |
|---|---|---|
| افزودن | item.color = "blue" |
ویژگی تازه روی همان آبجکت |
| حذف | delete item.draft |
آن کلید دیگر نیست |
| وجود | "sku" in item |
true یا false |
| تو در تو | user.address.city |
فیلدی داخل آبجکت دیگر |
| فهرست | Object.keys(user) |
آرایهٔ کلیدهای خودِ آبجکت |
اسم حرکت را که بدانید، خطش معلوم است. افزودن، آبجکت دومی نمیسازد. حذف، مقدار را به رشتهٔ خالی بدل نمیکند. فهرست نامها با خواندن یک مقدار یکی نیست.
let item = {
name: "Mug",
price: 8
};
item.color = "blue";
console.log(item.color);
اگر کلید نباشد، انتساب خودش آن را میسازد
item اول فقط name و price داشت. color در کار نبود؛ خط item.color = "blue" همان ویژگی را به وجود میآورد. آبجکت همان است، فقط یک ویژگی بیشتر دارد. در کنسول blue را میبینید.
let item = {
name: "Mug",
price: 8,
draft: true
};
delete item.draft;
console.log("draft" in item);
delete همان کلید را برمیدارد
delete item.draft همان ویژگی را برمیدارد، نه کل آبجکت را. بعدش "draft" in item برابر false است. نام و قیمت سر جایشان میمانند. ذخیرهٔ "" یا null کار دیگری است: کلید میماند و فقط مقدارش عوض میشود.
let item = {
name: "Mug",
price: 8
};
console.log("name" in item);
console.log("sku" in item);
in دربارهٔ خودِ کلید بله یا نه میگوید
"name" in item برابر true است — آن نام روی آبجکت هست. "sku" in item برابر false است — هرگز اضافهاش نکردهاید. ویژگیِ غایب موقع خواندن undefined میدهد، و undefined ذخیرهشده هم همینطور خوانده میشود. in از کلید میپرسد، نه از مقداری که آنجا نشسته.
let user = {
name: "Lina",
address: {
city: "Shiraz",
zip: "71345"
}
};
console.log(user.address.city);
ویژگی میتواند آبجکت دیگری را نگه دارد
address رشته نیست. آبجکتی است با city و zip. عبارت user.address.city دو قدم است: اول داخل address، بعد داخل city. کنسول Shiraz را چاپ میکند. تو در تو بودن تکههای نشانی را کنار هم نگه میدارد تا هر کدام را صاف روی user پهن نکنید.
let user = {
name: "Lina",
role: "editor"
};
let names = Object.keys(user);
console.log(names);
Object.keys اسم کلیدها را برمیگرداند
Object.keys(user) آرایهای از کلیدهای خودِ همان آبجکت میدهد — اینجا ["name", "role"]. مقدار را جداگانه، با نقطه یا براکت، میخوانید. وقتی نمیخواهید تکتک نامها را از قبل در کد بنویسید، همین فهرست کافی است. مقدارها را خودش چاپ نمیکند.
قبل از نوشتن، کار را مشخص کنید
ویژگی نو لازم است؟ مقدار بدهید. کلید باید برود؟ delete. فقط میخواهید بدانید هست یا نه؟ in. شهر داخل نشانی است؟ تو در تو بنویسید و با نقطهها جلو بروید. فقط اسم کلیدها را میخواهید؟ Object.keys. تابعهایی که روی خودِ آبجکت مینشینند — متدها — برای درس بعدیاند.
بعد از افزودن، شهر تو در تو را روی صفحه بگذارید
کاربر و نشانی را شروع کنید، داخل اسکریپت plan را اضافه کنید، و شهر را در پاراگراف بنشانید.
<!DOCTYPE html>
<html>
<head>
<title>object-properties — page</title>
</head>
<body>
<p id="place">…</p>
<script>
let user = {
name: "Lina",
address: { city: "Shiraz" }
};
user.plan = "yearly";
let box = document.getElementById("place");
box.textContent = user.address.city + " — " + user.plan;
</script>
</body>
</html>
پاراگراف Shiraz — yearly را نشان میدهد. شهر از قبل تو در تو بود؛ plan بعد از لیترال رسید. فقط city یا plan را عوض کنید، تازه کنید، و خط جدید را بخوانید. درس بعد: متدهای آبجکت — تابعهایی که روی آبجکت زندگی میکنند.
گامهای تمرین
- آبجکتی با دو ویژگی بسازید، سومی را با انتساب اضافه کنید و چاپش کنید.
- ویژگی
draftبگذارید، باdeleteبردارید، و"draft" in itemرا چک کنید. - روی آبجکتی که فقط
nameدارد،"name" in itemو"sku" in itemرا چاپ کنید. addressرا باcityتو در تو کنید، بعدuser.address.cityرا چاپ کنید.Object.keysرا برای آبجکتی با دو کلید چاپ کنید و آرایه را بخوانید.- در دموی HTML فقط
cityیاplanرا عوض کنید، تازه کنید، پاراگراف را بخوانید.
لغزشهای پرتکرار
- خیال کنید
item.color = "blue"آبجکت کاملاً تازه میسازد — همان قبلی را بزرگ میکند - بهجای
delete item.draftبنویسیدitem.draft = null— کلید میماند - کلید غایب و
undefinedذخیرهشده را یک سؤال بدانید — برای خودِ کلید ازinاستفاده کنید user.cityبنویسید در حالی کهcityرویuser.addressنشسته- انتظار داشته باشید
Object.keysمقدارها را برگرداند - در همین صفحه دنبال متد و
thisبگردید — آن درس بعدی است
جمعبندی
- انتساب به کلیدِ نبود، همان ویژگی را اضافه میکند
deleteکلید را برمیدارد؛ بقیهٔ آبجکت میماند"key" in objمیگوید آن کلید هست یا نه- ویژگی میتواند آبجکت دیگری نگه دارد؛ نقطههای بیشتر داخلش راه میروند
Object.keysنامها را برمیگرداند نه مقدارها را- فیلد تو در تو و فیلدی که تازه اضافه شده میتوانند روی صفحه در یک خط دیده شوند
- بعدی: متدهای آبجکت — تابعهای ذخیرهشده روی آبجکت
🧠 دانش خود را بیازمایید
دانش خود را بیازمایید
خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کردهاید
📝 دستورالعملها
- هر سوال را با دقت بخوانید
- بهترین پاسخ را برای هر سوال انتخاب کنید
- میتوانید آزمون را هر چند بار که میخواهید تکرار کنید
- پیشرفت شما در بالا نمایش داده میشود