| الأداة | الوظيفة | مثال الناتج |
|---|---|---|
| Object.keys() | مصفوفة بالمفاتيح | ["a", "b"] |
| Object.values() | مصفوفة بالقيم | [1, 2] |
| Object.entries() | مصفوفة من أزواج [مفتاح, قيمة] | [["a",1],["b",2]] |
| {...obj} | نسخ سطحي أو دمج | كائن جديد |
الكائن (Object) هو أهم هيكل بيانات في جافاسكريبت، ويُستخدم لتخزين مجموعة من البيانات المترابطة على شكل أزواج "مفتاح: قيمة" (Key-Value Pairs). يُعرَّف الكائن بين قوسين معقوفين {}، حيث كل مفتاح (Key) هو نص فريد، وقيمته يمكن أن تكون أي نوع بيانات — رقم، نص، مصفوفة، أو حتى كائن أو دالة أخرى.
للوصول إلى قيمة داخل كائن، توجد طريقتان: النقطة (Dot Notation) مثل كائن.مفتاح، وهي الأكثر شيوعاً وأوضح للقراءة، والأقواس المربعة (Bracket Notation) مثل كائن["مفتاح"]، وهي ضرورية عندما يكون اسم المفتاح متغيراً وليس نصاً ثابتاً، أو عندما يحتوي اسم المفتاح على مسافات أو رموز خاصة.
يمكن للكائن أن يحتوي أيضاً على دوال كقيم، وتُسمى في هذه الحالة "أساليب" (Methods). داخل هذه الأساليب، تُستخدم الكلمة المفتاحية this للإشارة إلى الكائن نفسه الذي يحتوي الأسلوب، مما يسمح بالوصول لبقية خصائص نفس الكائن.
من الأدوات الحديثة المهمة للتعامل مع الكائنات: Object.keys() تُعيد مصفوفة بكل المفاتيح، Object.values() تُعيد مصفوفة بكل القيم، وObject.entries() تُعيد مصفوفة من أزواج [مفتاح, قيمة] وهي مفيدة جداً للمرور على الكائن بحلقة for...of. كذلك Object.assign() وعامل الانتشار {...كائن} يُستخدمان لدمج أو نسخ الكائنات — مع ملاحظة مهمة أن هذا النسخ سطحي (Shallow Copy) فقط، أي أن الكائنات المتداخلة بداخله تبقى مُشارَكة بالمرجع.
| 1 | const شخص = { |
| 2 | الاسم: "محمد", |
| 3 | العمر: 28, |
| 4 | البريد: "m@example.com", |
| 5 | يقدم_نفسه: function () { |
| 6 | return `أنا ${this.الاسم} وعمري ${this.العمر}`; |
| 7 | }, |
| 8 | }; |
| 9 | |
| 10 | console.log(شخص.الاسم); // Dot Notation |
| 11 | console.log(شخص["العمر"]); // Bracket Notation |
| 12 | console.log(شخص.يقدم_نفسه()); |
مثال 1: استخدام Object.keys/values/entries
| 1 | // أدوات Object الحديثة |
| 2 | const منتج = { الاسم: "لابتوب", السعر: 3000, المتوفر: true }; |
| 3 | |
| 4 | console.log(Object.keys(منتج)); // ["الاسم", "السعر", "المتوفر"] |
| 5 | console.log(Object.values(منتج)); // ["لابتوب", 3000, true] |
| 6 | |
| 7 | for (const [مفتاح, قيمة] of Object.entries(منتج)) { |
| 8 | console.log(`${مفتاح}: ${قيمة}`); |
| 9 | } |
مثال 2: نسخ ودمج الكائنات بعامل الانتشار
| 1 | // نسخ ودمج الكائنات (Shallow Copy) |
| 2 | const افتراضي = { لون: "أبيض", حجم: "متوسط" }; |
| 3 | const مخصص = { ...افتراضي, لون: "أسود" }; // دمج مع تعديل |
| 4 | console.log(مخصص); // { لون: "أسود", حجم: "متوسط" } |
| 5 | console.log(افتراضي.لون); // "أبيض" — الأصل لم يتغير |