javascriptDestructuringبرداشت ساختاری داده در جاوااسکریپت
Destructuring در جاوااسکریپت چند مقدار را از شیء یا آرایه به نامهای روشن میدهد؛ تغییر نام، ردکردن خانه و پیشفرض برای undefined را ببینید.
مفهوم به زبان ساده
وقتی از مشخصات یک درس فقط عنوان و زمان را میخواهید، نوشتن دسترسی جدا به هر ویژگی ممکن است تکراری شود. برداشت ساختاری یا destructuring، چند مقدار را با یک الگوی روشن به نامهای محلی میدهد. در الگوی شیء، نام ویژگی تعیین میکند چه مقداری خوانده شود؛ در الگوی آرایه، جایگاه عضو اهمیت دارد. این ابزار روش تازهای برای خواندن داده است، نه سازوکاری برای معتبرکردن آن.
در مثال، title با نام محلی lessonTitle خوانده میشود؛ این تغییر نام، ویژگی شیء اصلی را عوض نمیکند. minutes صفر است و حفظ میشود، ولی level که وجود ندارد، مقدار پیشفرض میگیرد. در آرایه نیز خانهٔ دوم را عمداً رد میکنیم و برای خانهٔ سومِ موجودنبودن، پیشفرض قرار میدهیم.
پیشفرض فقط وقتی مقدار خواندهشده undefined باشد فعال میشود؛ null، صفر و رشتهٔ خالی را خودکار جایگزین نمیکند. همچنین گرفتن یک ویژگی شیئی، کپی عمیق آن شیء نمیسازد. اگر ورودی ممکن است null یا undefined باشد، پیش از بازکردن الگو آن را مدیریت کنید، چون خود این عمل میتواند خطا دهد. برای تمرین، level را null قرار دهید و خروجی را حدس بزنید؛ سپس توضیح دهید چرا پیشفرض مقدماتی اعمال نمیشود.
کجا به کار میآید؟
- خواندن چند فیلد مشخص از تنظیمات یا پاسخ معتبر
- نامگذاری محلی روشن برای ویژگی یا عضو آرایه
از تعریف تا یک مثال واقعی
const lesson = { title: 'آرایه', minutes: 0 };
const { title: lessonTitle, minutes = 20, level = 'مقدماتی' } = lesson;
const [first, , third = 'تمرین'] = ['متغیر', 'شرط'];
console.log(lessonTitle);
console.log(minutes);
console.log(level);
console.log(first);
console.log(third);
آرایه 0 مقدماتی متغیر تمرین
این مثال چطور کار میکند؟
title با نام محلی lessonTitle خوانده میشود.
صفرِ minutes حفظ میشود؛ تنها level ناموجود پیشفرض میگیرد.
ویرگول خالی، خانهٔ دوم آرایه را رد میکند.
خانهٔ سوم undefined است و مقدار تمرین جای آن قرار میگیرد.
اشتباه رایج
در { title: lessonTitle }، نام متغیر تازه lessonTitle است؛ title لزوماً نام محلی ساختهشده نیست. پیشفرض هم جای null یا صفر را نمیگیرد.
این را به خاطر بسپارید
در شیء نام ویژگی و در آرایه جایگاه را دنبال کنید؛ برداشت ساختاری، اعتبارسنجی یا کپی عمیق نیست.