symbol / bigint symbol و bigint
آخر تحديث: 2026-10-22
symbol / bigint symbol و bigint
ينشئ symbol قيمًا فريدة عالميًا لا تتكرر، وهو مناسب لمفاتيح الكائنات والمعرّفات الثابتة؛ أما bigint فيمثّل أعدادًا صحيحة بدقة غير محدودة، للأعداد التي تتجاوز النطاق الآمن للنوع number.
| المجموعة | الأنواع الأساسية |
|---|---|
| النوع | نوع |
| الوضع الصارم | غير مطلوب |
ℹ️ معلومة يحوّل المحرر لغة TypeScript إلى JavaScript ثم يشغّلها (بدون فحص أنواع)؛ راجع ناتج كل مثال لنتيجة فحص الأنواع.
📝 الصيغة
const key = Symbol("id"); // قيمة فريدة؛ "id" مجرد وصف
const big: bigint = 9007199254740993n; // قيمة دقيقة خارج النطاق الآمن
⚙️ المعاملات
| Symbol(desc) | المعامل هو نص وصفي (يُقرأ عبر .description) ولا يؤثر في التفرّد |
|---|---|
| 123n | قيم bigint تنتهي باللاحقة n؛ ويمكن التحويل أيضًا عبر BigInt(123) |
القيمة المُعادة:لا قيمة مُعادة — symbol/bigint تعليقات أنواع أساسية؛ أما Symbol() و BigInt() فدالتان في وقت التشغيل.
▶ مثال
عدّل الكود أدناه واضغط «جرّب» لرؤية نتيجة التحويل:
الناتج:
false order
9007199254740994
(مخرجات التشغيل بعد التحويل؛ رمزان Symbol واصفَاهما بالنص نفسه غير متساويين — وهذا هو معنى "التفرّد")
💡 نقاط مهمة
ℹ️ معلومة Symbol("a") !== Symbol("a") — فالوصف مجرد تسمية؛ ولتسجيل symbol مشترك عالميًا استخدم Symbol.for("a").
⚠️ تنبيه لا يمكن خلط bigint مع number في الحساب مباشرةً (تعبير 9007199254740993n + 1 يخطئ)، ولا يمكن تسلسله بـ JSON.stringify.
💡 تلميح لا تُعدّ الدالة Object.keys والحلقة for...in مفاتيح symbol، ما يجعلها مناسبة لتخزين "البيانات الوصفية الداخلية".
🏷️ الأنواع الأساسية ذات صلة
💡 حالات ذات صلة
المزيد من الحالات قادم قريبًا.
📚 دروس ذات صلة
❓ أسئلة شائعة
س متى أحتاج bigint؟
ج عندما تتجاوز القيمة الصحيحة 2^53 - 1 (أي 9007199254740991) أو عندما تُشترط دقة العدد الصحيح: معرّفات ندفة الثلج، وحسابات التشفير، وتجميع المبالغ الكبيرة بوحدة القروش. ضمن النطاق يكفي number العادي.
س ما الاستخدام الفعلي للنوع symbol؟
ج ثلاثة سيناريوهات نموذجية: إضافة مفاتيح خصائص داخلية غير متضاربة للكائنات، وإنشاء ثوابت فريدة على مستوى الوحدة، وتنفيذ بروتوكولات اللغة عبر رموز well-known مثل Symbol.iterator و Symbol.asyncIterator.
س هل تساوي قيمتا Symbol("a")؟
ج لا تساوي — فكل استدعاء Symbol() ينتج قيمة جديدة كليًا. وللحصول على الرمز نفسه عبر الوحدات استخدم Symbol.for("a") (جدول التسجيل العالمي) الذي يُرجع النسخة نفسها للمفتاح نفسه.