
- 3 min read
توقع مخرجات JavaScript #2 - مفاهيم متقدمة — ورقة الأجوبة الخاصة بالإختبار.
الجواب: false
الشرح : قيمة NaN هي القيمة الوحيدة في JavaScript التي لا تساوي نفسها. هذه سمة مميزة لـ NaN، للتحقق منها استخدم `isNaN()`.
الجواب: صحيح
الشرح : المعامل `!` يحوّل معامله إلى قيمة منطقية ثم ينفيه. `[]` هي قيمة 'truthy' (صحيحة)، لذا `![]` هي `false` (خطأ). ثم يقوم المعامل `==` بمحاولة تحويل النوع. يتم تحويل `[]` إلى سلسلة نصية فارغة `''`، ويتم تحويل `false` إلى `0`. `'' == 0` هي `true` (صحيح).
الجواب: خطأ مرجعي
الشرح : هذا خطأ منطقة الموت الزمني (TDZ). المتغير `x` داخل الدالة `foo` له نطاق كتلة بسبب `let`. عند تنفيذ `console.log(x)`، تم تعريف `x` ولكن لم يتم تهيئته بعد، مما يؤدي إلى `ReferenceError`.
الجواب: صحيح
الشرح : يعيد `typeof null` القيمة 'object' (وهو خطأ تاريخي في JavaScript). `null === null` هو صحيح. كلا الشرطين صحيحان، لذا النتيجة هي صحيح.
الجواب: 2
الشرح : يتم تعيين الكائنات بالإشارة. `arr[0]` يحمل إشارة إلى `obj`. عند تعديل `obj.a`، ينعكس التغيير في جميع الإشارات إلى هذا الكائن، بما في ذلك `arr[0]`.
الجواب: 10
الشرح : تقوم الدالة `parseInt()` بتحليل وسيطة نصية وإرجاع عدد صحيح. تتوقف عن التحليل عند أول حرف غير رقم أو إشارة، لذا تصبح '10.5 degrees' القيمة 10.
الجواب: 2
الشرح : عند استخدام صيغة المصفوفة الحرفية مع الفواصل، تُنشئ كل فاصلة ضمنيًا خانة فارغة. `[,,]` تحتوي على خانتين فارغتين (المؤشرين 0 و 1)، وبالتالي طولها هو 2.
الجواب: 1
الشرح : عند استخدام المعامل `+` مع القيم المنطقية، يتم تحويل `true` إلى `1` و `false` إلى `0`. لذا، `1 + 0` يساوي `1`.
الجواب: 0
الشرح : عندما يظهر `{}` في بداية تعليمة، يتم تفسيره غالبًا على أنه كتلة كود فارغة، وليس كائن حرفي. يصبح التعبير حينها `+[]`. يقوم معامل الجمع الأحادي بتحويل المصفوفة الفارغة `[]` إلى رقم، وهو `0`.
الجواب: [object Object]
الشرح : عند استخدام المعامل `+` مع مصفوفة وكائن، تحاول JavaScript تحويلهما إلى قيم بدائية. `[]` يتحول إلى سلسلة نصية فارغة `''`. `{}` يتحول إلى السلسلة النصية `'[object Object]'`. ثم يقوم المعامل `+` بإجراء دمج السلاسل النصية.