Ù٠ا عرÙÙØ§ Ù Ù ÙØµÙ Ø£ÙÙØ§Ø¹ Ø§ÙØ¨ÙØ§ÙØ§ØªØ ÙÙØ§Ù٠ث٠اÙ٠أÙÙØ§Ø¹ ÙÙØ¨ÙØ§ÙØ§Øª ÙÙ Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت. سبعة Ù ÙÙÙ ÙØ³Ù ÙÙ âØ£ÙÙÙØ© primitiveâØ ÙØ£Ù ÙÙÙ ÙÙ ØªØØªÙÙ Ø´ÙØ¦Ø§ ÙØ§ØØ¯Ø§Ù (ÙØªÙÙ Ø³ÙØ³ÙØ© ÙØµÙØ© أ٠رÙ٠أ٠أ٠شÙÙØ¡).
Ù٠اÙÙ ÙØ§Ø¨ÙØ ØªØ³ØªØ®Ø¯Ù Ø§ÙÙØ§Ø¦Ùات ÙØÙØ¸ Ù Ø¬Ù ÙØ¹Ø§Øª keyed collections ٠٠٠ختÙÙ Ø§ÙØ¨ÙØ§ÙØ§Øª ÙØ§ÙÙÙØ§Ùات اÙÙ Ø±ÙØ¨Ø©.ÙÙ Ø¬Ø§ÙØ§ Ø³ÙØ±ÙØ¨ØªØ ØªØ¯Ø®Ù Ø§ÙÙØ§Ø¦Ùات ØªÙØ±Ùبا ÙÙ ÙÙ Ø¬Ø§ÙØ¨ Ù Ù Ø¬ÙØ§Ùب اÙÙØºØ©. ÙØ°Ø§ ÙØªÙجب عÙÙÙØ§ ÙÙÙ ÙØ§ ÙØ¨Ù Ø§ÙØªØ¹Ù Ù ÙÙ Ø£Ù Ø´ÙØ¡ آخر.
ÙÙ
ÙÙ Ø¥ÙØ´Ø§Ø¡ Ø£Ù ÙØ§Ø¦Ù باستخداÙ
Ø§ÙØ£ÙÙØ§Ø³ اÙÙ
عÙÙÙØ© {â¦} Ù
ع ÙØ§Ø¦Ù
Ø© Ø§Ø®ØªÙØ§Ø±ÙØ© Ø¨Ø§ÙØ®Ø§ØµÙات. Ø§ÙØ®Ø§ØµÙØ© ÙÙ Ø²ÙØ¬ Ù
Ù âÙ
ÙØªØ§Ø: ÙÙÙ
Ø©â ( value) إذ ÙÙÙ٠اÙÙ
ÙØªØ§Ø عبارة Ø¹Ù ÙØµ (ÙÙØ¯Ø¹Ù âØ§Ø³Ù
Ø§ÙØ®Ø§ØµÙØ©â)Ø ÙØ§ÙÙÙÙ
Ø© ÙÙ
Ù٠أ٠تÙÙÙ Ø£Ù Ø´ÙØ¡.
ÙÙ ÙÙÙØ§ تخÙ٠اÙÙØ§Ø¦Ù ÙØ®Ø²Ø§ÙØ© تØÙÙ Ù ÙÙØ§Øª. ÙÙØ®Ø²Ù Ù٠جزء Ù Ù ÙØ°Ù Ø§ÙØ¨ÙØ§ÙØ§Øª Ù٠اÙÙ ÙÙ Ø§ÙØ®Ø§Øµ ب٠باستخدا٠اÙÙ ÙØªØ§Ø. ÙÙ ÙÙ Ø¥ÙØ¬Ø§Ø¯Ø Ø£Ù Ø¥Ø¶Ø§ÙØ©Ø Ø£Ù ØØ°Ù Ù Ù٠باستخدا٠اس٠Ù.
ÙÙ ÙÙ Ø¥ÙØ´Ø§Ø¡ ÙØ§Ø¦Ù ÙØ§Ø±Øº (âØ®Ø²Ø§ÙØ© ÙØ§Ø±ØºØ©â) Ø¨Ø§Ø³ØªØ®Ø¯Ø§Ù Ø¥ØØ¯Ù ترÙÙØ¨ØªÙÙ:
let user = new Object(); // "object constructor" syntax ØµÙØºØ© Ù
ÙØ´Ø¦ اÙÙØ§Ø¦Ù
let user = {}; // "object literal" syntax
ØªÙØ³ØªØ®Ø¯Ù
Ø§ÙØ£ÙÙØ§Ø³ اÙÙ
عÙÙÙØ© {...} Ø¹Ø§Ø¯Ø©Ø ÙÙØ°Ø§ اÙÙÙØ¹ Ù
Ù Ø§ÙØªØµØ±ÙØ ÙÙØ³Ù
Ù Â«Ø§ÙØµÙاغة اÙÙ
ختصرة ÙØªØ¹Ø±ÙÙ ÙØ§Ø¦Ù» (object literal).
اÙÙÙ٠اÙÙ ÙØ¬Ø±ÙÙØ¯Ø© ÙØ§ÙØ®Ø§ØµÙØ§Øª
ÙÙ
ÙÙÙØ§ Ø¥Ø¶Ø§ÙØ© بعض Ø§ÙØ®Ø§ØµÙات (properties) Ø¥Ù٠اÙÙØ§Ø¦Ù اÙÙ
عرÙÙÙ Ø¨Ø§ÙØ£ÙÙØ§Ø³ {...} Ù
باشرة بشÙÙ Ø£Ø²ÙØ§Ø¬ âÙ
ÙØªØ§Ø: ÙÙÙ
Ø©â:
let user = { // an object ÙØ§Ø¦Ù
name: "John", // خز٠اÙÙÙÙ
Ø© "John" عبر اÙÙ
ÙØªØ§Ø "name"
age: 30 // خز٠اÙÙÙÙ
Ø© "30" عبر اÙÙ
ÙØªØ§Ø "age"
};
ÙØ¯Ù ÙÙ Ø®Ø§ØµÙØ© Ù
ÙØªØ§Ø (ÙÙØ¯Ø¹Ù Ø£ÙØ¶Ùا "اسÙ
" Ø£Ù âÙ
ÙØ¹ÙرÙÙÙâ) ÙØ¨Ù اÙÙÙØ·ØªÙÙ ":" ÙÙÙÙ
Ø© ÙÙØ°Ù Ø§ÙØ®Ø§ØµÙØ© بعد اÙÙÙØ·ØªÙÙ.
ÙÙØ¬Ø¯ Ø®Ø§ØµÙØªÙÙ Ù٠اÙÙØ§Ø¦Ù user:
- اسÙ
Ø§ÙØ®Ø§ØµÙØ© Ø§ÙØ£ÙÙÙ ÙÙ
"name"ÙÙÙÙ ØªÙØ§ ÙÙ"John". - اسÙ
Ø§ÙØ®Ø§ØµÙØ© Ø§ÙØ«Ø§ÙÙØ© ÙÙ
"age"ÙÙÙÙ ØªÙØ§ ÙÙ"30".
ÙÙ
Ù٠تخÙ٠اÙÙØ§Ø¦Ù Ø§ÙØ³Ø§Ø¨Ù user ÙØ®Ø²Ø§ÙØ© بÙ
ÙÙÙÙ Ù
ÙØ³ÙÙ
ÙÙÙØ§Ù ânameâ Ù âageâ.
ÙÙ ÙÙÙØ§ Ø¥Ø¶Ø§ÙØ©Ø ÙØØ°ÙØ ÙÙØ±Ø§Ø¡Ø© اÙÙ ÙÙØ§Øª Ù Ù Ø§ÙØ®Ø²Ø§ÙØ© Ù٠أ٠ÙÙØª.
ÙÙ Ù٠اÙÙØµÙ٠إÙÙ ÙÙÙ Ø§ÙØ®Ø§ØµÙات Ø¨Ø§Ø³ØªØ®Ø¯Ø§Ù Ø§ÙØµÙغة اÙÙÙÙÙØ·ÙØ© (dot notation):
//Ø§ÙØØµÙ٠عÙÙ ÙÙÙ
خصائص اÙÙØ§Ø¦Ù:
alert( user.name ); // John
alert( user.age ); // 30
ÙÙ ÙÙ ÙÙÙÙÙ Ø© أ٠تÙÙ٠٠٠أ٠ÙÙØ¹Ø ÙÙÙÙØ¶ÙÙ ÙÙÙ Ø© Ù Ù ÙÙØ¹ Ø¨ÙØ§Ùات Ù ÙØ·ÙÙØ© (boolean):
user.isAdmin = true;
ÙÙ
ÙÙÙØ§ استخداÙ
اÙÙ
ÙØ¹Ø§Ù
ÙÙ delete ÙØØ°Ù Ø®Ø§ØµÙØ©:
delete user.age;
ÙÙ ÙÙÙØ§ Ø£ÙØ¶Ø§ Ø§Ø³ØªØ®Ø¯Ø§Ù Ø®Ø§ØµÙØ§Øª بأس٠اء تØÙÙ Ø£ÙØ«Ø± Ù Ù ÙÙÙ Ø©Ø ÙÙÙ ÙØ¬Ø¨ ÙØ¶Ø¹Ùا بÙÙ Ø¹ÙØ§Ù ات Ø§ÙØ§Ùتباس ââ:
let user = {
name: "John",
age: 30,
"likes birds": true // ÙØ¬Ø¨ أ٠تÙÙÙ Ø§ÙØ®Ø§ØµÙØ© ذات Ø§ÙØ§Ø³Ù
اÙÙ
ÙØØªÙ٠عÙÙ Ø£ÙØ«Ø± Ù
Ù ÙÙÙ
Ø© بÙÙ Ø¹ÙØ§Ù
ØªÙ Ø§ÙØªØ¨Ø§Ø³
};
ÙÙ ÙÙ Ø¥Ø¶Ø§ÙØ© ÙØ§ØµÙØ© بعد آخر Ø®Ø§ØµÙØ© Ù٠اÙÙØ§Ø¦Ù Ø©:
let user = {
name: "John",
age: 30,
}
ÙÙØ°Ø§ ÙØ³Ù Ù ÙØ§ØµÙØ© âØ²Ø§Ø¦Ø¯Ø©â Ø£Ù â٠عÙÙØ©â. ÙØ¬Ø¹Ù Ù Ù Ø§ÙØ³ÙÙ Ø¥Ø¶Ø§ÙØ©Ø Ø¥Ø²Ø§ÙØ©Ø ÙÙÙÙ Ø§ÙØ®ØµØ§Ø¦ØµØ ÙØ£Ù Ø¬Ù ÙØ¹ Ø§ÙØ£Ø³Ø·Ø± ØªØµØ¨Ø Ù ØªØ´Ø§Ø¨ÙØ©.
Ù ÙØ§ØØ¸Ø©: ÙÙ Ù٠تعدÙÙ ÙØ§Ø¦Ù ٠عÙ٠عÙ٠أÙ٠ثابت.
Ù Ø«ÙØ§Ù:
const user = {
name: "John"
};
user.name = "Pete"; // (*)
alert(user.name); // Pete
ÙØ¯ ÙØ¨Ø¯Ù Ø£Ù Ø§ÙØ®Ø· (*) Ø³ÙØ³Ø¨Ø¨ Ø®Ø·Ø£Ø ÙÙ٠ذÙÙ ÙÙ ÙØØ¯Ø«. ÙÙØØ¯ÙÙØ¯ âconstâ ÙÙÙ
Ø© âuserâØ ÙÙÙØ³ Ø¥ØµÙØ§Ø Ù
ØØªÙÙØ§ØªÙا.
ÙÙ ÙÙØ¸Ùر âconstâ Ø®Ø·Ø£ Ø¥ÙØ§ إذا ØØ§ÙÙÙØ§ تعÙÙÙ "user = â¦` ÙÙÙ.
ÙÙØ§Ù طرÙÙØ© Ø£Ø®Ø±Ù ÙØ®Ù٠خصائص ÙØ§Ø¦Ù Ø«Ø§Ø¨ØªØ©Ø ÙØ³ÙØªÙØ§ÙÙÙØ§ ÙØ§ØÙÙØ§ Ù٠اÙÙØµÙ Ø±Ø§ÙØ§Øª Ø§ÙØ®ØµØ§Ø¦Øµ Ù ÙØ§ØµÙØ§ØªÙØ§.
Ø§ÙØ£ÙÙØ§Ø³ اÙ٠ربعة
ÙØ§ تع٠٠طرÙÙØ© اÙÙØµÙ٠إÙÙ Ø§ÙØ®Ø§ØµÙات ذات Ø§ÙØ£Ø³Ù اء اÙÙ ØØªÙÙØ© عÙÙ Ø£ÙØ«Ø± Ù Ù ÙÙÙ Ø© Ø¨Ø§Ø³ØªØ®Ø¯Ø§Ù Ø§ÙØµÙغة اÙÙÙÙÙØ·ÙØ©:
// Ø³ÙØ¹Ø·Ù ÙØ°Ø§ خطأ ÙÙ Ø§ÙØµÙاغة
user.likes birds = true
ÙØ§ تÙÙÙ Ø¬Ø§ÙØ§ Ø³ÙØ±Ùبت ÙØ°Ù Ø§ÙØµÙغÙ. ÙØ¹ØªÙد Ø£ÙÙØ§ ÙØªØ¹Ø§Ù ٠٠ع âuser.likesâØ Ø«Ù ØªØ¹Ø·Ù Ø®Ø·Ø£ ÙÙ Ø¨ÙØ§Ø¡ Ø§ÙØ¬Ù ÙØ© Ø¹ÙØ¯Ù ا ÙØµØ§Ø¯Ù âbirdsâ ØºÙر ٠تÙÙØ¹Ø©.
ØªØªØ·ÙØ¨ اÙÙÙØ·Ø© Ø£Ù ÙÙÙ٠اÙÙ
ÙØªØ§Ø Ù
عرÙÙØ§ Ù
ØªØºÙØ±Ùا ØµØ§ÙØÙØ§. ÙØ°Ø§ ÙØ¹ÙÙ: Ø£ÙÙ ÙØ§ ÙØØªÙ٠عÙÙ Ù
Ø³Ø§ÙØ§ØªØ ÙÙØ§ ÙØ¨Ø¯Ø£ برÙÙ
ÙÙØ§ ÙØªØ¶Ù
Ù Ø£ØØ±ÙÙØ§ خاصة (ÙÙØ³Ù
Ø Ø¨Ù $ Ù_).
ÙÙØ§Ù بدÙÙ âØ±Ù Ø² اÙÙÙØ³ اÙÙ Ø±Ø¨Ø¹â Ø§ÙØ°Ù ÙØ¹Ù ٠٠ع Ø£Ù Ø³ÙØ³ÙØ©:
let user = {};
// تعÙÙÙ ÙÙÙ
Ø©
user["likes birds"] = true;
// Ø§ÙØØµÙ٠عÙÙ ÙÙÙ
Ø©
alert(user["likes birds"]); // true
// ØØ°Ù
delete user["likes birds"];
Ø§ÙØ¢Ù ÙÙ Ø´ÙØ¡ عÙ٠٠ا ÙØ±Ø§Ù . ÙØ±Ø¬Ù Ù ÙØ§ØØ¸Ø© Ø£Ù Ø§ÙØ³ÙØ³ÙØ© Ø¯Ø§Ø®Ù Ø§ÙØ£ÙÙØ§Ø³ Ù ÙØªØ¨Ø³Ø© بشÙ٠صØÙØ (Ø£Ù ÙÙØ¹ Ù Ù Ø¹ÙØ§Ù ات Ø§ÙØ§Ùتباس Ø³ØªÙØ¹Ù).
تÙÙØ± Ø§ÙØ£ÙÙØ§Ø³ اÙ٠ربعة Ø£ÙØ¶Ùا Ø¬ÙØ¨ Ø§Ø³Ù Ø®Ø§ØµÙØ© ÙØ§ØªØ¬Ø© ع٠ÙÙÙ Ø© Ø£Ù ØªØ¹Ø¨ÙØ± -عÙÙ Ø¹ÙØ³ Ø§ÙØ³ÙØ³ÙØ© Ø§ÙØØ±ÙÙØ©- ٠ث٠اÙÙ ØªØºÙØ± Ù٠ا ÙÙÙ:
let key = "likes birds";
// ÙØ´Ø¨Ù تÙ
اÙ
ا٠user["likes birds"] = true;
user[key] = true;
ÙÙØ§, اÙÙ
ØªØºÙØ± key ÙÙ
ÙÙ ØØ³Ø§Ø¨Ù ÙÙØª Ø§ÙØªÙÙÙØ° (run-time) أ٠اعتÙ
ادا عÙÙ Ù
ا ÙØ¯Ø®Ù٠اÙÙ
ستخدÙ
. Ù
Ù Ø«Ù
ÙØ³ØªØ®Ø¯Ù
ÙØ§ ÙÙÙØµÙ٠إÙÙ Ø§ÙØ®Ø§ØµÙØ©. ÙÙØ°Ø§ ÙÙ
ÙØÙØ§ ÙØ¯Ø±Ø§Ù ÙØ¨Ùرا٠Ù
٠اÙÙ
رÙÙØ©.
Ù Ø«ÙØ§Ù:
let user = {
name: "John",
age: 30
};
let key = prompt("What do you want to know about the user?", "name");
// اÙÙØµÙ٠ع٠طرÙ٠اÙÙ
ØªØºÙØ±
alert( user[key] ); // John (if enter "name")
ÙØ§ ÙÙ Ù٠استخدا٠ر٠ز اÙÙÙØ·Ø© بطرÙÙØ© Ù Ù Ø§Ø«ÙØ© Ù٠ا ٠ضÙ:
let user = {
name: "John",
age: 30
};
let key = "name";
alert( user.key ) // undefined
خصائص Ù ØØ³Ùبة (computed properties)
ÙÙ ÙÙÙØ§ Ø§Ø³ØªØ®Ø¯Ø§Ù Ø§ÙØ£ÙÙØ§Ø³ اÙ٠ربعة ÙÙ ÙØ§Ø¦Ù ØØ±ÙÙ object literalØ Ø¹ÙØ¯ Ø¥ÙØ´Ø§Ø¡ ÙØ§Ø¦Ù. ÙÙØ°Ø§ ٠ا ÙØ³Ù Ù * Ø§ÙØ®ØµØ§Ø¦Øµ اÙÙ ØØ³Ùبة computed properties*.
Ù Ø«ÙØ§:
let fruit = prompt("Which fruit to buy?", "apple");
let bag = {
[fruit]: 5, // ÙØ¤Ø®Ø° اسÙ
Ø§ÙØ®Ø§ØµÙØ© Ù
٠اÙÙ
ØªØºÙØ± fruit
};
alert( bag.apple ); // 5 if fruit="apple"
Ù
عÙÙ computed property سÙÙ: [fruit] تعÙ٠أ٠اسÙ
Ø§ÙØ®Ø§ØµÙØ© ÙØ¬Ø¨ Ø£Ù ÙØ¤Ø®Ø° Ù
Ù fruit.
ÙØ°Ø§, إذا Ø£Ø¯Ø®Ù Ø§ÙØ²Ø§Ø¦Ø± "apple"Ø bag ستتØÙÙ {apple: 5}.
ÙØ¹Ù Ù Ø§ÙØ£Ù ر Ø§ÙØ³Ø§Ø¨Ù Ø¨Ø§ÙØ·Ø±ÙÙØ© Ø§ÙØªØ§ÙÙØ© Ø°Ø§ØªÙØ§:
let fruit = prompt("Which fruit to buy?", "apple");
let bag = {};
// خذ اسÙ
Ø§ÙØ®Ø§ØµÙØ© Ù
Ù Ù
ØªØºÙØ± fruit
bag[fruit] = 5;
â¦Ùبد٠ذÙÙ Ø£ÙØ¶Ù.
ÙÙ ÙÙÙØ§ Ø§Ø³ØªØ®Ø¯Ø§Ù ØªØ¹Ø¨ÙØ±Ø§Øª Ø£ÙØ«Ø± تعÙÙØ¯Ø§Ù Ø¯Ø§Ø®Ù Ø§ÙØ£ÙÙØ§Ø³ اÙ٠ربعة:
let fruit = 'apple';
let bag = {
[fruit + 'Computers']: 5 // bag.appleComputers = 5
};
Ø§ÙØ£ÙÙØ§Ø³ اÙ٠ربعة Ø£ÙÙÙ Ø¨ÙØ«Ùر Ù Ù Ø§Ø³ØªØ®Ø¯Ø§Ù Ø§ÙØµÙغة اÙÙÙÙØ·ÙØ©. ØÙØ« ØªØ³Ù Ø Ø¨Ø§Ø³ØªØ®Ø¯Ø§Ù Ø£Ù Ø£Ø³Ù Ø§Ø¡ خصائص ÙÙ ØªØºÙØ±Ø§Øª. ÙÙÙÙØ§ Ø£ÙØ¶Ø§ Ø£ÙØ«Ø± Ø¥Ø±ÙØ§Ùا٠Ù٠اÙÙØªØ§Ø¨Ø©.
ÙØ°ÙÙØ ٠عظ٠اÙÙÙØªØ ØÙÙ٠ا ÙÙÙÙ Ø§Ø³Ù Ø®Ø§ØµÙØ© ٠عرÙÙØ§ Ø£Ù ØºÙØ± Ù Ø±ÙØ¨Ø ØªØ³ØªØ®Ø¯Ù Ø§ÙØµÙغة اÙÙÙÙØ·ÙØ©. ÙØ¥Ø°Ø§ Ø£Ø±Ø¯ÙØ§ Ø´ÙØ¦Ø§Ù Ø£ÙØ«Ø± تعÙÙØ¯Ø§Ø ÙÙØªÙ٠إÙÙ Ø§Ø³ØªØ®Ø¯Ø§Ù Ø§ÙØ£ÙÙØ§Ø³ اÙ٠ربعة.
اختصار ÙÙÙ Ø© Ø§ÙØ®Ø§ØµÙØ© (Property value shorthand)
ÙÙ Ø§ÙØ´ÙÙØ±Ø© Ø§ÙØÙÙÙÙØ©Ø ØºØ§ÙØ¨Ùا ٠ا ÙØ³ØªØ®Ø¯Ù اÙÙ ØªØºÙØ±Ø§Øª اÙÙ ÙØ¬Ùدة Ø¨ØµÙØªÙا ÙÙÙÙ ÙØ§ ÙØ£Ø³Ù اء Ø§ÙØ®ØµØ§Ø¦Øµ.
Ù Ø«ÙØ§Ù:
function makeUser(name, age) {
return {
name: name,
age: age,
// ...other properties
};
}
let user = makeUser("John", 30);
alert(user.name); // John
Ù٠اÙÙ Ø«Ø§Ù Ø§ÙØ³Ø§Ø¨ÙØ ØªÙ ØªÙÙ Ø§ÙØ®ØµØ§Ø¦Øµ ÙÙØ³ أس٠اء اÙÙ ØªØºÙØ±Ø§Øª. ØØ§ÙØ© Ø¹Ù Ù Ø®Ø§ØµÙØ© Ù Ù Ù ØªØºÙØ± Ù٠أ٠ر شائع Ø¬Ø¯Ø§Ø that ذÙ٠أÙ٠٠٠اÙÙ Ù ÙØ² ÙØ¬Ùد اختصار ÙÙÙ Ø© Ø§ÙØ®Ø§ØµÙØ© ÙØ¬Ø¹ÙÙØ§ ٠ختصرة .
Ø¨Ø¯ÙØ§Ù Ù
Ù name:name ÙÙ
ÙÙÙØ§ ÙÙØ· ÙØªØ§Ø¨Ø© nameØ ÙÙØ°Ø§ اÙÙ
ثاÙ:
function makeUser(name, age) {
return {
name, // تÙ
اÙ
ا٠Ù
ث٠name: name
age, // تÙ
اÙ
ا٠Ù
ث٠age: age
// ...
};
}
ÙÙ ÙÙÙØ§ استخدا٠ÙÙ Ù Ù Ø§ÙØ®ØµØ§Ø¦Øµ Ø§ÙØ¹Ø§Ø¯ÙØ© ÙØ§Ùاختصارات ÙÙÙÙ٠ا ÙÙ ÙÙØ³ اÙÙØ§Ø¦Ù:
let user = {
name, // same as name:name
age: 30
};
ÙÙÙØ¯ أس٠اء Ø§ÙØ®ØµØ§Ø¦Øµ Property names limitations
Ù٠ا ÙØ¹ÙÙ Ø ÙØ§ ÙÙ ÙÙ ÙÙÙ ØªØºÙØ± Ø£Ù Ù٠تÙÙ Ø§Ø³Ù Ø§Ù ÙØ³Ø§ÙÙ ÙØ§ØØ¯Ø§Ù ٠٠اÙÙÙ٠ات اÙÙ ØÙÙØ¸Ø© ÙÙØºØ© (language-reserved words) ٠ث٠âforâ, âletâ, âreturnâ Ø¥ÙØ®.
ÙÙ٠باÙÙØ³Ø¨Ø© ÙØ®Ø§ØµÙØ© ÙÙ ÙØ§Ø¦ÙØ ÙØ§ ØªÙØ¬Ø¯ Ù Ø«Ù ÙØ°Ù اÙÙÙÙØ¯:
// ÙÙ ÙØ°Ù Ø§ÙØ®ØµØ§Ø¦Øµ صØÙØØ©
let obj = {
for: 1,
let: 2,
return: 3
};
alert( obj.for + obj.let + obj.return ); // 6
Ø¨Ø§Ø®ØªØµØ§Ø±Ø ÙÙØ³ ÙÙØ§Ù Ø£Ù ÙÙÙØ¯ ÙØ£Ø³Ù اء Ø§ÙØ®ØµØ§Ø¦Øµ. ÙÙ ÙÙÙØ§ أ٠تÙÙÙ Ø£Ù ØØ±Ù أ٠ر٠ز (ÙÙØ¹ Ù Ù ÙØ² Ù Ù identifiersØ Ø³ÙØªÙ Ø§ÙØØ¯ÙØ« عÙÙ ÙØ§ØÙاÙ).
Ø§ÙØ£ÙÙØ§Ø¹ Ø§ÙØ£Ø®Ø±Ù تتØÙ٠تÙÙØ§Ø¦ÙØ§Ù ÙØ³ÙØ§Ø³Ù ÙØµÙØ© strings.
Ù
Ø«ÙØ§Ù, رÙÙ
0 ÙØªØÙ٠إÙÙ ØØ±Ù "0" Ø¹ÙØ¯ استخداÙ
٠اسÙ
ا ÙØ®Ø§ØµÙØ©:
let obj = {
0: "test" // same as "0": "test"
};
// ÙÙÙÙÙ
ا ÙØ³Ù
ØØ§Ù باÙÙØµÙ٠إÙÙ Ø§ÙØ®Ø§ØµÙØ© (رÙÙ
0 ÙØªØÙ٠إÙÙ ØØ±Ù "0")
alert( obj["0"] ); // test
alert( obj[0] ); // test (same property)
Thereâs a minor gotcha with a special property named __proto__. ÙØ§ ÙÙ
ÙÙÙØ§ استخداÙ
Ø§ÙØ§Ø³Ù
عÙ٠أÙÙÙÙ ÙÙÙ
Ø© ÙØºÙر ÙØ§Ø¦Ù:
let obj = {};
obj.__proto__ = 5; // assign a number
alert(obj.__proto__); // [object Object] - the value is an object, didn't work as intended
ÙÙ
ا ÙØ±Ù ÙÙ Ø§ÙØ´ÙÙØ±Ø© Ø£Ø¹ÙØ§ÙØ Ø¥Ø¹Ø·Ø§Ø¡ ÙÙÙ
Ø© Ø£ÙÙÙØ© 5 ÙØªÙ
تجاÙÙÙØ§.
سÙÙ ÙØºØ·Ù Ø·Ø¨ÙØ¹Ø© __proto__ ÙÙ subsequent chaptersØ ÙØ§ÙØªØ±Ø§Ø ways to fix Ù
Ø«Ù ÙØ°Ø§ Ø§ÙØ³ÙÙÙ.
ÙØØµ اÙÙÙÙÙÙØ©Ø âinâ ٠عا٠Ù
Ù ÙØ²Ø© Ù ÙØÙØ¸Ø© ÙÙÙØ§Ø¦Ùات ÙÙ Ø¬Ø§ÙØ§ Ø³ÙØ±ÙØ¨ØªØ Ù ÙØ§Ø±ÙØ© Ø¨Ø§ÙØ¹Ø¯Ùد ٠٠اÙÙØºØ§Øª Ø§ÙØ£Ø®Ø±ÙØ Ù٠أÙ٠٠٠اÙÙ Ù Ù٠اÙÙØµÙ٠إÙÙ Ø£Ù Ø®Ø§ØµÙØ©. ÙÙ ÙÙÙÙ ÙÙØ§Ù خطأ إذا ÙØ§Ùت Ø§ÙØ®Ø§ØµÙØ© ØºÙØ± Ù ÙØ¬Ùدة!
ÙØ±Ø§Ø¡Ø© Ø®Ø§ØµÙØ© ØºÙØ± Ù ÙØ¬Ùدة ØªÙØ±Ø¬Ø¹ ÙÙØ· âØºÙØ± Ù ØØ¯Ø¯â. ÙØ°Ø§ ÙÙ ÙÙÙØ§ بسÙÙÙØ© اختبار ٠ا إذا ÙØ§Ùت Ø§ÙØ®Ø§ØµÙØ© Ù ÙØ¬Ùدة:
let user = {};
alert( user.noSuchProperty === undefined ); // "تØÙÙ ÙØ°Ù اÙÙ
ÙØ§Ø²ÙØ© ÙØ´Ùر Ø¥ÙÙ "عدÙ
ÙØ¬Ùد Ø§ÙØ®Ø§ØµÙØ©
ÙÙØ¬Ø¯ Ø£ÙØ¶Ø§ Ù
ÙØ¹Ø§Ù
٠خاصة "in" ÙÙØØµ ÙØ¬Ùد Ø£Ù Ø®Ø§ØµÙØ©.
The syntax is:
"key" in object
Ù Ø«ÙØ§Ù:
let user = { name: "John", age: 30 };
alert( "age" in user ); // true, user.age Ù
ÙØ¬Ùد
alert( "blabla" in user ); // false, user.blabla ØºÙØ± Ù
ÙØ¬Ùد
ÙØ±Ø¬Ù Ù
ÙØ§ØØ¸Ø© Ø£ÙÙ ÙÙ Ø§ÙØ¬ÙØ© اÙÙØ³Ø±Ù Ù
Ù in ÙØ¬Ø¨ Ø£Ù ÙÙÙÙ ÙÙØ§Ù اسÙ
Ø®Ø§ØµÙØ©. ÙÙÙ٠عادة ÙØµÙا بÙÙ Ø¹ÙØ§Ù
ØªÙ ØªÙØµÙص.
إذا ØØ°ÙÙØ§ Ø¹ÙØ§Ù ات Ø§ÙØªÙØµÙØµØ ÙÙØ°Ø§ ÙØ¹ÙÙ Ù ØªØºÙØ±ÙØ§Ø ÙØ¬Ø¨ Ø£Ù ÙØØªÙ٠عÙÙ Ø§ÙØ§Ø³Ù اÙÙØ¹Ù٠اÙ٠راد اختبارÙ. عÙ٠سبÙ٠اÙ٠ثاÙ:
let user = { age: 30 };
let key = "age";
alert( key in user ); // true, Ø®Ø§ØµÙØ© "age" Ù
ÙØ¬Ùدة
ÙÙ
اذا ÙÙØ¬Ø¯ اÙÙ
عاÙ
Ù in? Ø£ÙÙØ³ Ù
٠اÙÙØ§Ù٠اÙÙ
ÙØ§Ø±ÙØ© Ù
ÙØ§Ø¨Ù undefined?
ØØ³ÙØ§ÙØ ÙÙ Ù
عظÙ
Ø§ÙØ£ØÙا٠اÙÙ
ÙØ§Ø±ÙØ© بÙundefined تÙÙÙ Ø¬ÙØ¯Ø©. ÙÙÙÙ ÙÙØ§Ù ØØ§ÙØ© خاصة Ø¹ÙØ¯Ù
ا ØªÙØ´ÙØ ÙÙÙ "in" تعÙ
٠بشÙ٠صØÙØ.
ÙØØ¯Ø« ذÙÙ Ø¹ÙØ¯ ÙØ¬Ùد Ø®Ø§ØµÙØ© Ø¯Ø§Ø®Ù ÙØ§Ø¦ÙØ ÙÙÙÙÙØ§ تخز٠ÙÙÙ
Ø© undefined:
let obj = {
test: undefined
};
alert( obj.test ); // تعط٠undefined, ÙØ°ÙÙ - Ø£ÙØ§ ØªÙØ¬Ø¯ ÙØ°Ù Ø§ÙØ®Ø§ØµÙØ©Ø
alert( "test" in obj ); // true, Ø§ÙØ®Ø§ØµÙØ© Ù
ÙØ¬Ùدة باÙÙØ¹Ù!
ÙÙ Ø§ÙØ´ÙÙØ±Ø© Ø§ÙØ³Ø§Ø¨ÙØ©Ø Ø§ÙØ®Ø§ØµÙØ© obj.test Ù
ÙØ¬Ùدة باÙÙØ¹Ù. ÙØ°Ø§ Ù
عاÙ
Ù inÙØ¹Ù
٠بشÙ٠صØÙØ.
Ù
ÙØ§ÙÙ Ù
Ø«Ù ÙØ°Ù ØªØØ¯Ø« ÙØ§Ø¯Ø±Ø§ÙØ ÙØ£Ù undefined ÙØ§ ÙÙØ¨ØºÙ تعÙÙÙÙØ§ بشÙ٠ذاتÙ. عادة Ù
ا ÙØ³ØªØ®Ø¯Ù
null ÙÙÙÙÙ
ØºÙØ± اÙÙ
عرÙÙØ© أ٠اÙÙØ§Ø±ØºØ©. ÙØ°Ø§ Ù
عاÙ
Ù in ÙØ¹ØªØ¨Ø± ضÙÙØ§Ù ØºØ±ÙØ¨Ø§Ù ÙÙ Ø§ÙØ´ÙÙØ±Ø©.
The âforâ¦inâ loop
ÙÙÙ
Ø±ÙØ± عÙÙ ÙÙ Ù
ÙØ§ØªÙØ Ø§ÙÙØ§Ø¦ÙØ ÙÙØ¬Ø¯ Ø´Ù٠خاص آخر ÙÙØÙÙØ© loop: for..in. ÙØ°Ù Ø§ÙØÙÙØ© Ù
ختÙÙØ© تÙ
اÙ
ÙØ§ عÙ
ا Ø¯Ø±Ø³ÙØ§Ù سابÙÙØ§Ø Ø£Ù Ø§ÙØÙÙØ© for(;;).
طرÙÙØ© اÙÙØªØ§Ø¨Ø© ÙÙ Ø§ÙØ´ÙÙØ±Ø©:
for (key in object) {
//ÙØªÙÙØ° Ù
ا Ø¨Ø¯Ø§Ø®Ù Ø§ÙØÙÙØ© ÙÙÙ Ù
ÙØªØ§Ø ضÙ
Ù Ø®Ø§ØµÙØ§Øª اÙÙØ§Ø¦Ù
}
Ù
Ø«ÙØ§ÙØ ÙÙØ·Ø¨Ø¹ جÙ
ÙØ¹ Ø®Ø§ØµÙØ§Øª اÙÙØ§Ø¦Ù user:
let user = {
name: "John",
age: 30,
isAdmin: true
};
for (let key in user) {
// اÙÙ
ÙØ§ØªÙØ
alert( key ); // name, age, isAdmin
// ÙÙÙ
اÙÙ
ÙØ§ØªÙØ
alert( user[key] ); // John, 30, true
}
ÙØ§ØØ¸ أ٠جÙ
ÙØ¹ تراÙÙØ¨ âforâ ØªØªÙØ ÙÙØ§ تعرÙÙ Ù
ØªØºÙØ± Ø§ÙØªÙرار Ø¨ÙØ¯Ø§Ø®Ù Ø§ÙØÙÙØ©Ø Ù
ث٠let key Ù٠اÙÙ
Ø«Ø§Ù Ø§ÙØ³Ø§Ø¨Ù.
Ø£ÙØ¶Ø§ÙØ ÙÙ
ÙÙÙØ§ استخداÙ
اسÙ
Ù
ØªØºÙØ± آخر Ø¨Ø¯ÙØ§ Ù
Ù key. Ù
Ø«ÙØ§Ø "for (let prop in obj)" Ù
ستخدÙ
Ø£ÙØ¶Ø§Ù Ø¨ÙØ«Ø±Ø©.
Ø§ÙØªØ±ØªÙب ٠ث٠اÙÙØ§Ø¦Ùات
Ù٠اÙÙØ§Ø¦Ùات Ù Ø±ØªØ¨Ø©Ø Ø¨Ù Ø¹ÙÙ Ø¢Ø®Ø±Ø Ø¥Ù ØªÙÙÙÙØ§ ÙÙ ØÙÙØ© Ø®ÙØ§Ù ÙØ§Ø¦ÙØ ÙÙ ÙØØµÙ Ø¹ÙÙ Ø¬Ù ÙØ¹ Ø§ÙØ®Ø§ØµÙات بÙÙØ³ Ø§ÙØªØ±ØªÙب Ø§ÙØ°Ù Ø£ÙØ¶ÙÙØª Ø¨ÙØ ÙÙÙ ÙÙ ÙÙÙØ§ Ø§ÙØ§Ø¹ØªÙ اد عÙÙ ÙØ°Ø§Ø
Ø§ÙØ¥Ø¬Ø§Ø¨Ø© باختصار ÙÙ: â٠رتب بطرÙÙØ© خاصةâ: Ø§ÙØ®Ø§ØµÙات Ø§ÙØ±ÙÙ ÙØ© ÙÙØ¹Ø§Ø¯ ØªØ±ØªÙØ¨ÙØ§Ø ØªØ¸ÙØ± باÙÙ Ø§ÙØ®Ø§ØµÙات Ø¨ØªØ±ØªÙØ¨ Ø§ÙØ¥Ùشاء ذات٠Ù٠ا ÙÙ Ø§ÙØªÙاصÙÙ Ø§ÙØªØ§ÙÙØ©.
٠ثاÙ, ÙÙØ± ÙØ§Ø¦ÙØ§Ù Ø®ØµØ§Ø¦ØµÙ Ø±Ù ÙØ² اÙÙØ§ØªÙ:
let codes = {
"49": "Germany",
"41": "Switzerland",
"44": "Great Britain",
// ..,
"1": "USA"
};
for (let code in codes) {
alert(code); // 1, 41, 44, 49
}
ÙØ¯ ÙØ³ØªØ®Ø¯ اÙÙØ§Ø¦Ù ÙØ§ÙØªØ±Ø§Ø ÙØ§Ø¦Ù
Ø© Ù
Ù Ø§ÙØ®Ùارات ÙÙÙ
ستخدÙ
. Ø¥Ù ÙÙØ§ ÙÙÙÙ
بعÙ
٠اÙÙ
ÙÙØ¹ بشÙÙ Ø±Ø¦ÙØ³Ù ÙÙØ²Ùار Ø§ÙØ£ÙÙ
Ø§Ù ÙØ¥ÙÙØ§ ÙØ±Ùد Ø£Ù ÙØ¸Ùر 49 Ù٠أÙ٠اÙÙØ§Ø¦Ù
Ø©.
ÙÙ٠إذا ÙÙ ÙØ§ بتشغÙ٠اÙÙÙØ¯, ÙØ¥ÙÙØ§ ÙØ±Ù ØµÙØ±Ø© ٠ختÙÙØ© ت٠ا٠اÙ:
- USA (1) ØªØ¸ÙØ± Ø£ÙÙØ§Ù
- ث٠Switzerland (41) ÙÙÙØ°Ø§.
تستخدÙ
رÙ
ÙØ² اÙÙØ§ØªÙ بشÙ٠تصاعد٠, ÙØ£ÙÙØ§ Ø£Ø±ÙØ§Ù
. ÙØ°ÙÙ 1, 41, 44, 49.
âØ§ÙØ®ØµØ§Ø¦Øµ Ø§ÙØ±ÙÙ ÙØ© integer propertyâ Ù ØµØ·ÙØ ÙØ¹ÙÙ ÙÙØ§ ÙØµÙا ÙÙ Ù٠تØÙÙÙÙ Ù Ù ÙØ¥Ù٠عدد دÙÙ Ø£Ù ÙØªØºÙر.
ÙØ°Ø§, â49â ÙÙ Ø§Ø³Ù Ø®Ø§ØµÙØ© عددÙ, ÙØ£ÙÙ Ø¹ÙØ¯ تØÙÙÙ٠إÙ٠عدد ÙØ¥Ø±Ø¬Ø§Ø¹Ù ÙÙØµ, ÙØ¨ÙÙ Ù٠ا ÙÙ. ÙÙÙ â+49â Ù â1.2â are ÙÙØ³Ø§ ÙØ°ÙÙ:
// ÙÙ Ø¯Ø§ÙØ© ØªØØ°Ù Ø§ÙØ¬Ø²Ø¡ Ø§ÙØ¹Ø´Ø±Ù Math.trunc
alert( String(Math.trunc(Number("49"))) ); // "49", Ø§ÙØ®Ø§ØµÙØ© Ø§ÙØ¹Ø¯Ø¯ÙØ© Ø°Ø§ØªÙØ§
alert( String(Math.trunc(Number("+49"))) ); // "49" Ù
ختÙÙØ© ع٠"49+" => Ø¥Ø°ÙØ§ ÙÙØ³Øª Ø®Ø§ØµÙØ© Ø¹Ø¯Ø¯ÙØ©
alert( String(Math.trunc(Number("1.2"))) ); // "1" Ù
ختÙÙØ© ع٠"1.2" => Ø¥Ø°ÙØ§ ÙÙØ³Øª Ø®Ø§ØµÙØ© Ø¹Ø¯Ø¯ÙØ©
â¦Ù٠اÙÙ ÙØ§Ø¨ÙØ Ø¥Ù ÙØ§Ùت اÙÙ ÙØ§ØªÙØ ØºÙØ± Ø¹Ø¯Ø¯ÙØ©Ø ÙØªÙØ¹Ø±ÙØ¶ Ø¨Ø§ÙØªØ±ØªÙب Ø§ÙØ°Ù Ø£ÙÙØ´Ùئت بÙ,Ù Ø«ÙØ§:
let user = {
name: "John",
surname: "Smith"
};
user.age = 25; // add one more
// ØªÙØ¹Ø±Ø¶ Ø§ÙØ®Ø§ØµÙات Ø§ÙØºÙر رÙÙ
ÙØ© Ø¨ØªØ±ØªÙØ¨ Ø§ÙØ¥Ùشاء
for (let prop in user) {
alert( prop ); // name, surname, age
}
ÙØ°Ø§, ÙØ¥ØµÙØ§Ø ÙØ°Ù اÙÙ
Ø´ÙÙØ© Ù
ع رÙ
ÙØ² اÙÙØ§ØªÙ, ÙÙ
ÙÙÙØ§ âØ§ÙØªØØ§ÙÙâ Ø¨Ø¬Ø¹ÙÙØ§ ØºÙØ± Ø¹Ø¯Ø¯ÙØ©. ÙØ¶Ø¹ Ø¹ÙØ§Ù
Ø© "+" ÙØ¨Ù Ù٠رÙ
ز ÙØ¹ØªØ¨Ø± ÙØ§ÙÙØ§Ù.
Ù٠ا ÙÙÙ:
let codes = {
"+49": "Germany",
"+41": "Switzerland",
"+44": "Great Britain",
// ..,
"+1": "USA"
};
for (let code in codes) {
alert( +code ); // 49, 41, 44, 1
}
ÙØ§Ùآ٠تع٠٠ÙÙ٠اÙÙ Ø·ÙÙØ¨.
اÙÙ ÙØ®Øµ
اÙÙØ§Ø¦Ùات عبارة ع٠٠صÙÙÙØ§Øª ØªØ±Ø§Ø¨Ø·ÙØ© Ø¨Ù ÙØ²Ø§Øª خاصة Ø¹Ø¯ÙØ¯Ø©.
تØÙظ Ø§ÙØ®ØµØ§Ø¦Øµ ب (key-value pairs), ØÙØ«:
- Ù ÙØ§ØªÙØ Ø§ÙØ®Ùاص ÙØ¬Ø¨ أ٠تÙÙÙ ÙØµØ§Ù أ٠ر٠زا٠(عادة ٠ا تÙÙÙ ÙØµØ§Ù).
- اÙÙÙÙ ÙÙ Ù٠أ٠تÙÙ٠٠٠أ٠ÙÙØ¹.
ÙÙÙØµÙ٠إÙÙ Ø®Ø§ØµÙØ©, ÙÙ ÙÙÙØ§ استخدا٠:
- رÙ
ز اÙÙÙØ·Ø©:
obj.property. - رÙ
ز Ø§ÙØ£ÙÙØ§Ø³ اÙÙ
ربعة
obj["property"]. ØªØ³Ù Ø Ø§ÙØ£ÙÙØ§Ø³ اÙ٠ربعة بأخذ اÙÙ ÙØªØ§Ø Ù Ù Ù ØªØºÙØ±, Ù Ø«Ùobj[varWithKey].
Ù Ø¹Ø§Ù ÙØ§Øª إضاÙÙØ© Additional operators:
- ÙØØ°Ù Ø®Ø§ØµÙØ©:
delete obj.prop. - ÙÙØªØ£Ùد Ù
Ù ÙØ¬Ùد Ø®Ø§ØµÙØ© تØÙ
٠اÙÙ
ÙØªØ§Ø اÙÙ
عطÙ:
"key" in obj. - ÙÙØªÙÙÙ Ø®ÙØ§Ù ÙØ§Ø¦Ù:
for (let key in obj)loop.
Ù
ا Ø¯Ø±Ø³ÙØ§Ù ÙÙ ÙØ°Ø§ اÙÙØµÙ ÙØ³Ù
Ù âplain objectâ, Ø£Ù Object.
ÙÙØ§Ù٠أÙÙØ§Ø¹ Ø¹Ø¯ÙØ¯Ø© ٠٠اÙÙØ§Ø¦Ùات ÙÙ Ø§ÙØ¬Ø§Ùا Ø§Ø³ÙØ±Ùبت:
Array٠صÙÙÙØ© ÙØªØ®Ø²ÙÙ Ù Ø¬Ù ÙØ¹Ø© Ø§ÙØ¨ÙØ§ÙØ§Øª اÙ٠رتبة,DateØªØ§Ø±ÙØ® ÙØªØ®Ø²Ù٠٠عÙÙ٠ات ع٠اÙÙÙØª ÙØ§ÙØªØ§Ø±ÙØ®,Errorخطأ ÙØªØ®Ø²Ù٠٠عÙÙ٠ات ع٠خطأ ٠ا.- â¦Ù٠ا Ø¥Ù٠ذÙÙ.
ÙØ¯Ù ÙØ°Ù Ø§ÙØ£ÙÙØ§Ø¹ Ù ÙØ²Ø§ØªÙا Ø§ÙØ®Ø§ØµØ© Ø§ÙØªÙ Ø³ÙØªÙ Ø¯Ø±Ø§Ø³ØªÙØ§ ÙØ§ØÙÙØ§. ÙÙÙ٠بعض Ø§ÙØ£Ø´Ø®Ø§Øµ Ø£ØÙاÙÙØ§ Ø´ÙØ¦Ùا ٠ث٠âÙÙØ¹ ٠صÙÙÙØ©â Ø£Ù âÙÙØ¹ ØªØ§Ø±ÙØ®â, ÙÙÙ ÙØ°Ù Ø§ÙØ£ÙÙØ§Ø¹ ÙÙØ³Øª Ø£ÙÙØ§Ø¹Ùا ٠ستÙÙØ© Ø¨ØØ¯ ذاتÙ, ÙÙÙÙØ§ ØªÙØªÙ Ù âobjectâ ÙÙØ¹ Ø§ÙØ¨Ø§Ùات"ÙØ§Ø¦Ù". ÙØªØªÙرع عÙÙ Ø¨Ø£Ø´ÙØ§Ù ٠ختÙÙØ©.
تعد اÙÙØ§Ø¦Ùات ÙÙ Ø¬Ø§ÙØ§ Ø§Ø³ÙØ±Ùبت ÙÙÙØ© جدا. ÙÙØ§ ÙÙ ÙØ§ بعرض Ø³Ø·Ø Ù ÙØ¶Ùع ضخ٠ØÙÙØ§. Ø³ÙØªØ¹Ø§Ù ٠٠ع اÙÙØ§Ø¦Ùات ÙØ§ØÙÙØ§ Ø¨ØµÙØ±Ø© Ø£ÙØ±Ø¨ ÙØ³ÙÙØªØ¹ÙÙ Ø£ÙØ«Ø± عÙÙØ§ ÙÙ ÙØµÙ٠أخرÙ.
Ø§ÙØªØ¹ÙÙÙØ§Øª
<code>Ø ÙÙÙÙØ«Ùر Ù Ù Ø§ÙØ³Ø·Ùر استخدÙ<pre>Ø ÙÙØ£Ùثر Ù Ù 10 Ø³Ø·ÙØ± استخد٠(plnkr, JSBin, codepenâ¦)