استخدام Symbols كمفاتيح للكائنات
استخدموا Symbols لخصائص لا تتعارض مع غيرها.
استخدام Symbols كمفاتيح للكائنات درس مجاني في JavaScript Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في JavaScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة JavaScript Academy 4 دروس في المجموع.
الرموز كمفاتيح
يمكن استخدام الرمز مفتاحًا لخاصية في كائن. وبما أن كل رمز فريد، فلا يمكن لهذه الخاصية أن تتصادم عن طريق الخطأ مع أي مفتاح نصي.
const id = Symbol("id")
const user = {}
user[id] = 123
console.log(user[id])مفاتيح الرموز المحسوبة
لاستخدام رمز كمفتاح في كائن حرفي، ضعه بين قوسين مربعين باعتباره اسم خاصية محسوبًا.
const id = Symbol("id")
const user = {
name: "Ann",
[id]: 99
}
console.log(user[id])قراءة خاصية رمز
يجب أن تحتفظ بمرجع إلى الرمز نفسه لقراءة خاصيته. ومن دون هذا المرجع، تكون القيمة مخفية عمليًا.
const secret = Symbol("secret")
const obj = { [secret]: "hidden" }
console.log(obj[secret])غير قابلة للتعداد في for-in
يتخطى for-in مفاتيح الرموز، مما يُبقي خصائص الرموز خارج التكرار المعتاد.
const tag = Symbol("tag")
const obj = { a: 1, b: 2, [tag]: 3 }
for (const key in obj) {
console.log(key)
}يتخطاها Object.keys
يعرض Object.keys المفاتيح النصية فقط، ولذلك تُستبعد منه أيضًا الخصائص ذات مفاتيح الرموز.
const tag = Symbol("tag")
const obj = { a: 1, [tag]: 2 }
console.log(Object.keys(obj))مخفية عن JSON
يتجاهل JSON.stringify مفاتيح الرموز بالكامل، ولذلك لا تظهر مطلقًا في الناتج المتسلسل. وهذا يجعلها مفيدة للبيانات الوصفية الداخلية.
const meta = Symbol("meta")
const obj = { name: "Bo", [meta]: "internal" }
console.log(JSON.stringify(obj))العثور على مفاتيح الرموز
لسرد مفاتيح الرموز، استخدم Object.getOwnPropertySymbols، إذ يعيد مصفوفة بخصائص الرموز الموجودة في الكائن.
const tag = Symbol("tag")
const obj = { a: 1, [tag]: 2 }
const syms = Object.getOwnPropertySymbols(obj)
console.log(syms.length)تجنب تعارض الأسماء
تتيح مفاتيح الرموز للمكتبات المختلفة إضافة خصائص إلى الكائن نفسه من دون خطر الكتابة فوق خصائص بعضها بعضًا، لأن رموزها مختلفة.
const libA = Symbol("data")
const libB = Symbol("data")
const shared = {}
shared[libA] = 1
shared[libB] = 2
console.log(shared[libA], shared[libB])مفاتيح الرموز وعامل النشر
ينسخ عامل نشر الكائن مفاتيح الرموز أيضًا، بخلاف for-in وObject.keys، لذا انتبه إلى أنها تنتقل عند استنساخ الكائن.
const tag = Symbol("tag")
const src = { a: 1, [tag]: 2 }
const copy = { ...src }
console.log(copy[tag])تخزين بيانات شبيهة بالخاصّة
توفر مفاتيح الرموز شكلًا بسيطًا من الخصوصية: فلا يمكن للكود الوصول إلى البيانات إلا إذا كان يحتفظ بالرمز، كما تظل خارج قوائم الخصائص المعتادة.
const balance = Symbol("balance")
function makeAccount() {
const acct = {}
acct[balance] = 100
return { acct: acct, key: balance }
}
const a = makeAccount()
console.log(a.acct[a.key])حذف خصائص الرموز
تزيل خاصية رمز بالطريقة نفسها التي تزيل بها أي خاصية أخرى، باستخدام معامل delete مع مرجع الرمز.
const tag = Symbol("tag")
const obj = { [tag]: 5 }
delete obj[tag]
console.log(obj[tag])اختبار سريع
اختبر معرفتك بمفاتيح الرموز.
مراجعة
مراجعة: تجعل الرموز مفاتيح كائنات آمنة ومخفية.
- استخدم الأقواس المربعة مع مفاتيح الرموز المحسوبة
- يتخطاها for-in وObject.keys وJSON
- يمكن سردها باستخدام Object.getOwnPropertySymbols
- مفيدة جدًا للبيانات الوصفية الخالية من التعارضات
const k = Symbol("k")
const o = { [k]: 7 }
console.log(o[k])الأسئلة الشائعة
هل درس «استخدام Symbols كمفاتيح للكائنات» مجاني؟
نعم — نص درس «استخدام Symbols كمفاتيح للكائنات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة JavaScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة JavaScript Academy 4 دروس في المجموع.
ماذا ستتعلم في «استخدام Symbols كمفاتيح للكائنات»؟
استخدموا Symbols لخصائص لا تتعارض مع غيرها. تتمرن على JavaScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ JavaScript Academy؟
لا تُشترط خبرة سابقة. JavaScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «استخدام Symbols كمفاتيح للكائنات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس JavaScript Academy هذا؟
نعم. كل درس في JavaScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- إنشاء Symbols فريدة
- استخدام Symbols كمفاتيح للكائنات
- السجل العام لـ Symbol
- الرموز المعروفة جيدًا