דילוג לתוכן המרכזי
מודול 5 · שיעור 4 מתוך 420/32 בקורס~12 min
שיעורי מודול (4/4)

לנסות / לתפוס / לזרוק

שגיאה ב-JavaScript היא ערך (בדרך כלל אובייקט Error) שקוטע את הזרימה הרגילה ומעלה את ערימת השיחות עד שמישהו תופס אותה. המבנה לטיפול במקרה זה הוא try / catch.

זריקת שגיאה: throw

JS
function dividi(a, b) {
  if (b === 0) {
    throw new Error('Divisione per zero');
  }
  return a / b;
}

throw קוטע מיד את הפונקציה הנוכחית.

תופס: try / catch

JS
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 (...) מקבל את השגיאה.

finally (אופציונלי)

קוד שפועל תמיד, טעות או לא. שימושי לסגירת משאבים:

JS
try {
  // ... operazione rischiosa
} catch (err) {
  // ... log
} finally {
  // ... pulizia (sempre eseguita)
}

מתי להשתמש בו (ומתי לא)

  • כן: פעולות I/O (JSON.parse על קלט לא מהימן, fetch, גישה לדיסק), המרות ש יכול להיכשל.
  • אולי לא: לזרימה הרגילה. אם אתה יודע שקלט עשוי להיות לא חוקי, עדיף לבדוק אותו עם if מאשר לזרוק ולתפוס.
JS
// 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: '...' }

נסה את זה

פעילות גופנית#js.m5.l4.e1
ניסיונות: 0טוען...

הגדר `safeDivide(a,b)`: אם b הוא 0, זרקו שגיאה עם ההודעה 'Divisione per zero', אחרת החזר a/b.

טוען עורך...
הצג רמז

if (b === 0) throw new Error('...'); לאחר מכן החזר א/ב.

הפתרון זמין לאחר 3 ניסיונות

סקירת התרגיל

פעילות גופנית#js.m5.l4.e2
ניסיונות: 0טוען...

הגדר `parseJsonSafe(text)`: אם הטקסט חוקי JSON החזר { ok: true, value: <object> }, אחרת { ok: false }. השתמש ב- try/catch ב-JSON.parse.

טוען עורך...
הצג רמז

עטוף את JSON.parse ב-try; ב-catch מחזירים { בסדר: false }.

הפתרון זמין לאחר 3 ניסיונות