در حال بارگذاری...

اشکال‌زدایی

اشکال‌زدایی یعنی پیدا کردن علت رفتار غلط. این صفحه یک سفارش دارد: { drink: "tea", size: "regular" }. تابع به‌اشتباه ویژگی cup را می‌خواند. لاگ خراب tea / undefined است. بعد از اصلاح، خط صفحه fixed / tea / regular می‌شود.

این درس کلاس نیست

صفحهٔ قبل کلاس‌های Drink و SpecialDrink را ساخت و خطش tea / regular / mint بود. آن‌جا چیزی عمداً خراب نبود.
اینجا داده از اول درست است. تابع order.cup را می‌خواند، در حالی که شیء ویژگی size دارد نه cup.

اول مقدار را ببین

console.log یک مقدار را چاپ می‌کند و اسکریپت ادامه پیدا می‌کند. console.warn هشدار را مشخص می‌کند. console.error شکست را مشخص می‌کند. هیچ‌کدام داده را تعمیر نمی‌کنند؛ فقط مقدار غلط را قابل دیدن می‌کنند.

نام ویژگی غلط است

label مقدار order.drink و order.cup را به هم می‌چسباند. drink وجود دارد، پس کلمهٔ اول tea است. cup وجود ندارد، پس کلمهٔ دوم undefined است.

چاپ برچسب خراب

javascript
const order = { drink: "tea", size: "regular" };
function label(order) {
return order.drink + " / " + order.cup;
}
console.log(label(order));

لاگ tea / undefined است. شیء هنوز size دارد؛ تابع آن را نخوانده است.

شکست را مشخص کن

وقتی size نیست، console.error را با یک دلیل کوتاه صدا بزن. این قطعه یک شیء بدون size می‌گیرد تا مسیر خطا اجرا شود.

گزارش نبودن size

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

کنسول خطای missing size را نشان می‌دهد و متن برگشتی tea / missing size است. رشتهٔ خالی هم نبودن حساب می‌شود، چون !"" درست است.

توقف عمدی

دستور debugger از مرورگر می‌خواهد وقتی ابزار توسعه‌دهنده باز است، اجرا را نگه دارد. اگر ابزار بسته باشد، این دستور کاری نمی‌کند و خط بعدی اجرا می‌شود.

توقف وقتی ابزار باز است

javascript
const order = { drink: "tea", size: "regular" };
debugger;
console.log(order.size);

با ابزار باز، اجرا روی debugger می‌ایستد و می‌توانی order را ببینی. با ابزار بسته، لاگ همچنان regular است. debugger خطا نیست و order را عوض نمی‌کند.

فهرست فراخوانی

اگر label تابع format را صدا بزند و format خطا بدهد، کنسول نام هر دو تابع را فهرست می‌کند. از بالای فهرست شروع کن؛ همان خطِ شکست است. بعد به تابع صدازننده برگرد. باگ این صفحه خطا پرتاب نمی‌کند. undefined یک مقدار است، پس تا وقتی خودت لاگ نکنی فهرست ساکت می‌ماند.

فقط یک نام را عوض کن

order.cup را به order.size تغییر بده. برای خاموش کردن undefined ویژگی cup به شیء اضافه نکن. شیء از اول درست بود.

خط بعد از اصلاح

صفحه size را می‌خواند، آن را چک می‌کند و یک وضعیت کوتاه را قبل از برچسب می‌نویسد.

نمایش صفحه — برچسب اصلاح‌شده

html
<!DOCTYPE html>
<html>
<body>
<p id="line">…</p>
<script>
const order = { drink: "tea", size: "regular" };
function label(order) {
if (!order.size) {
console.error("missing size");
return order.drink + " / missing size";
}
return order.drink + " / " + order.size;
}
document.getElementById("line").textContent = "fixed / " + label(order);
</script>
</body>
</html>

خط fixed / tea / regular است. کلمهٔ fixed فقط وضعیت است. نام نوشیدنی و اندازه از خود شیء می‌آیند. tea / undefined خروجی تابع خراب بود.

پشت پیشخوان

  1. تا وقتی تابع order.cup را می‌خواند، label(order) را لاگ کن. لاگ tea / undefined است.
  2. شیء { drink: "tea" } را بده و پیام خطا را بخوان. پیام missing size است.
  3. debugger را در اسکریپت بگذار. با ابزار بسته، لاگ بعدی همچنان regular است.
  4. خط صفحه را بخوان: fixed / tea / regular.

اشتباه‌های رایج

  • عوض کردن شیء فقط چون لاگ undefined است
  • فرض کردن که console.log اجرا را نگه می‌دارد
  • انتظار توقف صفحه از debugger وقتی ابزار توسعه‌دهنده بسته است
  • خواندن خط tea / regular / mint از درس کلاس
  • صدا زدن console.error و تصور اینکه خطا پرتاب می‌شود

جمع‌بندی

  • console.log مقدار را نشان می‌دهد و اسکریپت ادامه پیدا می‌کند
  • خواندن خراب order.cup است؛ ویژگی واقعی size است
  • console.error("missing size") شکست را مشخص می‌کند و خطا پرتاب نمی‌کند
  • debugger فقط وقتی ابزار توسعه‌دهنده باز است اجرا را نگه می‌دارد
  • خط صفحه: fixed / tea / regular

🧠 دانش خود را بیازمایید

آماده شروع

دانش خود را بیازمایید

خود را با این آزمون تعاملی به چالش بکشید و ببینید موضوع را چقدر خوب درک کرده‌اید

❓
7
سوالات
🎯
70%
برای قبولی
♾️
∞
زمان
🔄
∞
تلاش‌ها

📝 دستورالعمل‌ها

  • هر سوال را با دقت بخوانید
  • بهترین پاسخ را برای هر سوال انتخاب کنید
  • می‌توانید آزمون را هر چند بار که می‌خواهید تکرار کنید
  • پیشرفت شما در بالا نمایش داده می‌شود