جاري التحميل...

الأخطاء

الخطأ هو طريقة الدالة في رفض المتابعة. تستخدم هذه الصفحة { drink: "tea" } بلا size. throw new Error("missing size") يوقف label فورًا، قبل return. يستقبل catch كائن Error هذا. يُقرأ سطر الصفحة caught / missing size.

هذه ليست صفحة تصحيح الأخطاء

استدعت الصفحة السابقة console.error("missing size") ثم أعادت نصًا بديلًا. استمر السكربت. لم يُرمَ شيء. console.error لا يرمي.
throw مختلف. الأسطر التي تليه في الدالة نفسها لا تُنفَّذ. وحده catch يستطيع أن يتولى الأمر. كان سطر التصحيح السابق fixed / tea / regular.

يحمل Error سلسلتين

new Error("missing size") ينشئ كائنًا. error.name هو Error. error.message هو النص المُمرَّر، missing size. تسجيل الكائن أقل فائدة من تسجيل هذين الحقلين.

يستقبل catch كائن Error

ترمي label عندما يغيب size. الاستدعاء داخل try، فيعمل catch ويطبع error.message، والنص هو missing size.

التقاط حجم ناقص

javascript
function label(order) {
if (!order.size) {
throw new Error("missing size");
}
return order.drink + " / " + order.size;
}
try {
console.log(label({ drink: "tea" }));
} catch (error) {
console.log(error.message);
}

السجل هو missing size. لم تصل label إلى return، فلا يُنتَج هنا tea / missing size.

الطلب الجيد يتخطى catch

أعطِ size القيمة regular. تعود label بشكل طبيعي. لا يعمل catch.

طلب مكتمل

javascript
function label(order) {
if (!order.size) {
throw new Error("missing size");
}
return order.drink + " / " + order.size;
}
try {
console.log(label({ drink: "tea", size: "regular" }));
} catch (error) {
console.log(error.message);
}

السجل هو tea / regular.

يعمل finally في الحالتين

يعمل finally بعد try عند النجاح، وبعد catch عند الرمي. استخدمه لخطوة يجب أن تحدث في الحالتين.

finally بعد throw

javascript
function label(order) {
if (!order.size) {
throw new Error("missing size");
}
return order.drink + " / " + order.size;
}
try {
label({ drink: "tea" });
} catch (error) {
console.log(error.message);
} finally {
console.log("done");
}

السجلان هما missing size ثم done. بعد الرمي يكتب finally القيمة done.

اقرأ الاسم والرسالة

التقط Error نفسه واطبع الحقلين في سطرين منفصلين.

الاسم والرسالة

javascript
try {
throw new Error("missing size");
} catch (error) {
console.log(error.name);
console.log(error.message);
}

السجلان هما Error ثم missing size. إذن error.name هو Error وerror.message هو missing size.

الفحص يرمي، والمستدعي يلتقط

requireSize تعرف القاعدة. ترمي ولا تبني تسمية. المستدعي يقرر ما يُطبع.

افصل الفحص

javascript
function requireSize(order) {
if (!order.size) {
throw new Error("missing size");
}
}
try {
requireSize({ drink: "tea" });
console.log("ok");
} catch (error) {
console.log(error.message);
}

السجل هو missing size. السطر console.log("ok") لا يُنفَّذ، لأن رمي requireSize قفز إلى catch.

السطر تحت الكوب

تستدعي الصفحة label بلا حجم. يبني catch السطر الظاهر من الرسالة.

عرض الصفحة — خطأ مُلتقَط

html
<!DOCTYPE html>
<html>
<body>
<p id="line">…</p>
<script>
function label(order) {
if (!order.size) {
throw new Error("missing size");
}
return order.drink + " / " + order.size;
}
let line = "";
try {
line = label({ drink: "tea" });
} catch (error) {
line = "caught / " + error.message;
}
document.getElementById("line").textContent = line;
</script>
</body>
</html>

يُقرأ السطر caught / missing size. كان طلب مكتمل سيعيد tea / regular ويترك catch بلا استخدام. fixed / tea / regular كان سطر صفحة التصحيح.

عند المنضدة

  1. استدعِ label({ drink: "tea" }) داخل try. سجل catch هو missing size.
  2. استدعِ label({ drink: "tea", size: "regular" }). السجل tea / regular، ولا يعمل catch.
  3. أضف finally حول الاستدعاء الفاشل. السجل الثاني هو done.
  4. اقرأ error.name وerror.message. السجلان Error و missing size.
  5. اقرأ سطر الصفحة: caught / missing size.

هفوات عند المنضدة

throw يوقف الدالة. console.error لا يرمي ولا يوقف الدالة.

  • توقع تنفيذ الأسطر بعد throw
  • نسيان catch وترك الخطأ بلا التقاط
  • ظن أن finally يعمل فقط بعد النجاح
  • قراءة error.message على أنه الاسم Error
  • قراءة السطر على أنه fixed / tea / regular

احتفظ بهذا

  • throw new Error("missing size") يوقف label قبل return
  • يستقبل catch كائن Error ويطبع error.message، وهو missing size
  • الطلب المكتمل يسجّل tea / regular ويتخطى catch
  • بعد الرمي يكتب finally القيمة done
  • يُقرأ سطر الصفحة caught / missing size

🧠 اختبر معرفتك

جاهز للبدء

اختبر معرفتك

تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع

❓
5
الأسئلة
🎯
70%
للنجاح
♾️
∞
الوقت
🔄
∞
المحاولات

📝 التعليمات

  • اقرأ كل سؤال بعناية
  • اختر أفضل إجابة لكل سؤال
  • يمكنك إعادة الاختبار عدة مرات كما تريد
  • سيتم عرض تقدمك في الأعلى