
بررسی پاسخهای بخش ۷:
**پاسخ ۱:
- در جاوااسکریپت، تقسیم بر صفر خطا نمیدهد!
- نتیجه تقسیم بر صفر
Infinityاست - بنابراین کد داخل
catchاجرا نمیشود
خروجی صحیح:
Infinity
پایان محاسبات
**پاسخ ۲:
data.ageبرابرundefinedاستundefined.toString()خطایTypeErrorمیدهد- خطا در
catchگرفته میشود و “خطا رخ داد” چاپ میشود
**پاسخ ۳:
- ساختار کلی درست است
- اما
promptهمیشه یک رشته برمیگرداند، باید به عدد تبدیل شود
try {
const input = prompt('لطفاً یک عدد وارد کنید:');
const number = Number(input);
if (number < 0) {
throw new Error('عدد نمیتواند منفی باشد');
}
console.log('عدد معتبر است: ' + number);
} catch (error) {
console.log('خطا: ' + error.message);
}خلاصه نکات مهم مدیریت خطا:
-
خطاهای رایج:
ReferenceError: متغیر تعریف نشدهTypeError: عملیات روی نوع نادرستSyntaxError: خطای دستوریRangeError: عدد خارج از محدوده مجاز
-
تقسیم بر صفر:
- در جاوااسکریپت خطا نمیدهد
10 / 0→Infinity-10 / 0→-Infinity0 / 0→NaN
-
best practiceها:
- از
try-catchفقط برای خطاهای غیرقابل پیشبینی استفاده کن - خطاهای قابل پیشبینی را با شرطهای عادی بررسی کن
- در
finallyعملیات پاکسازی (مثل بستن فایل) را انجام بده
- از
بخش ۸: دیباگینگ - پیدا کردن و رفع خطاها
۱. استفاده ازconsole.log()
سادهترین روش برای دنبال کردن مقدار متغیرها:
function calculate(a, b) {
console.log("ورودیها:", a, b); // ✅ خوب
let result = a + b;
console.log("نتیجه:", result); // ✅ خوب
return result;
}
calculate(5, 3);۲. استفاده از debugger
ایجاد breakpoint برنامهریزی شده در کد:
function findMax(x, y) {
debugger; // ❗اجرا در این خط متوقف میشود
if (x > y) {
return x;
} else {
return y;
}
}
let max = findMax(10, 5);
console.log("بیشترین:", max);۳. Breakpoints در DevTools
قدرتمندترین روش برای دیباگینگ:
مراحل استفاده در Chrome:
- راستکلیک → “Inspect”
- تب “Sources”
- انتخاب فایل JS
- کلیک روی شماره خط برای قرار دادن breakpoint
- رفرش صفحه
۴. تحلیل Call Stack
پیگیری ترتیب فراخوانی توابع:
function first() {
second();
}
function second() {
third();
}
function third() {
console.trace(); // 🔍 نمایش call stack
throw new Error("خطای آزمایشی");
}
first();سؤالات تمرینی بخش ۸:
۱. مشکل کد زیر چیست و چگونه با console.log آن را دیباگ میکنی؟
function multiply(a, b) {
let result = a * b;
return result;
}
let total = multiply(5, "2");
console.log(total);۲. چگونه از debugger برای بررسی کد زیر استفاده میکنی؟
function checkAge(age) {
if (age >= 18) {
return "بزرگسال";
} else {
return "خردسال";
}
}
let status = checkAge(20);۳. چه خطایی در کد زیر رخ میدهد و call stack چگونه خواهد بود؟
function start() {
process();
}
function process() {
calculate();
}
function calculate() {
let data = undefined;
console.log(data.name);
}
start();