دروس الوحدة (4/4)
حاول / قبض / رمي
الخطأ في JavaScript هو قيمة (عادةً كائن Error) يقاطع التدفق الطبيعي
والفقاعات تصل إلى مكدس الاستدعاءات حتى يلتقطها شخص ما. البناء للتعامل مع هذه الحالة هو
try / catch.
ظهور خطأ: throw
function dividi(a, b) {
if (b === 0) {
throw new Error('Divisione per zero');
}
return a / b;
}throw يقاطع الوظيفة الحالية على الفور.
الالتقاط: try / catch
try {
const r = dividi(10, 0);
console.log('ok', r);
} catch (err) {
console.log('errore:', err.message); // 'errore: Divisione per zero'
}
// Il programma continua qui, anche se c'è stato un errore.تم تنفيذ كل شيء بداخل try؛ إذا تم إلقاء خطأ (عبر throw أو عن طريق أي عملية
يفشل)، ينتقل عنصر التحكم إلى الكتلة catch. يتلقى المتغير بعد catch (...) الخطأ.
محمي_INLINE_13 (اختياري)
الكود الذي يتم تشغيله دائمًا، خطأ أم لا. مفيد لإغلاق الموارد:
try {
// ... operazione rischiosa
} catch (err) {
// ... log
} finally {
// ... pulizia (sempre eseguita)
}متى تستخدمه (ومتى لا)
- نعم: عمليات الإدخال/الإخراج (
JSON.parseعلى الإدخال غير الموثوق به،fetch، الوصول إلى القرص)، والتحويلات التي يمكن أن تفشل. - ربما لا: للتدفق الطبيعي. إذا كنت تعلم أن أحد الإدخالات قد يكون غير صالح، فمن الأفضل التحقق منه
باستخدام
ifبدلاً من الرمي والالتقاط.
// Tipico: parsing JSON difensivo
function parseJsonSafe(text) {
try {
return { ok: true, value: JSON.parse(text) };
} catch (err) {
return { ok: false, error: err.message };
}
}
parseJsonSafe('{"a":1}'); // { ok: true, value: {a:1} }
parseJsonSafe('non json'); // { ok: false, error: '...' }جربه
حدد `safeDivide(a, b)`: إذا كانت b تساوي 0، فقم بإلقاء خطأ مع الرسالة "Divisione per Zero"، وإلا قم بإرجاع a/b.
إظهار التلميح
إذا (ب === 0) رمي خطأ جديد('...'); ثم العودة أ / ب.
الحل متاح بعد 3 من المحاولات
تمرين المراجعة
حدد `parseJsonSafe(text)`: إذا كان النص صالحًا، قم بإرجاع JSON { ok: true، value: <object> }، وإلا { ok: false }. استخدم محاولة/التقاط على JSON.parse.
إظهار التلميح
لف JSON.parse في المحاولة؛ في الإرجاع {حسنًا: خطأ}.
الحل متاح بعد 3 من المحاولات