ما هو الكائن؟
مجموعة من الخصائص (مفتاح: قيمة) تصف شيئًا:
let person = {
name: "براء",
age: 25,
isStudent: true,
hobbies: ["برمجة", "قراءة"]
};
الوصول إلى الخصائص
person.name // "براء" (النقطة)
person["age"] // 25 (الأقواس — مفيد للمفاتيح الديناميكية)
let key = "name";
person[key] // "براء"
التعديل والإضافة والحذف
person.age = 26; // تعديل
person.city = "عمّان"; // إضافة
delete person.isStudent; // حذف
الدوال داخل الكائن (Methods)
let user = {
name: "براء",
greet() {
return `أهلًا، أنا ${this.name}`;
}
};
user.greet(); // "أهلًا، أنا براء"
🔑 الكلمة
thisتشير إلى الكائن نفسه الذي استُدعيت الدالة من خلاله.
التفكيك (Destructuring) 🌟
استخراج خصائص في متغيّرات بسهولة:
let { name, age } = person;
console.log(name, age); // "براء" 25
// مع قيمة افتراضية
let { city = "غير محدّد" } = person;
المرور على الكائن
Object.keys(person) // ["name", "age", "city"] المفاتيح
Object.values(person) // ["براء", 26, "عمّان"] القيم
Object.entries(person) // [["name","براء"], ...] أزواج
for (let key in person) {
console.log(key, person[key]);
}
النسخ والدمج بـ Spread
let copy = { ...person };
let merged = { ...defaults, ...overrides };
الكائنات المتداخلة
let user = {
name: "براء",
address: { city: "عمّان", country: "الأردن" }
};
user.address.city // "عمّان"
user?.address?.city // وصول آمن (?.) إن كان قد لا يوجد
الأخطاء الشائعة
- ❌ نسيان
thisداخل دوال الكائن للوصول لخصائصه. - ❌ استخدام الدوال السهمية كـ methods تحتاج
this→ السهمية لا تربطthisالخاص بالكائن. - ❌ توقّع نسخ عميق من
{...obj}→ النسخ سطحي (الكائنات المتداخلة تبقى مشتركة).
خلاصة
الكائنات تصف الأشياء بخصائص ودوال. استخدم النقطة أو الأقواس للوصول، وthis داخل الدوال، والتفكيك { } للاستخراج، وObject.keys/values/entries للمرور. هي أساس تنظيم البيانات في JS.