خطاها در جاوااسکریپت - رخ دادن خطا و رفع آن

از ویکی کد
پرش به ناوبری پرش به جستجو
میانبر:
الگو:اصلاح جدول
دورهٔ آموزشی جاوااسکریپت
Javascript.jpg
جاوااسکریپت
موارد آموزشی
۱آموزش جاوااسکریپت
۲مقدمه‌ای بر جاوااسکریپت
۳قوانین و اصول اولیه زبان جاوااسکریپت
۴خروجی جاوااسکریپت
۵عبارت‌ها در جاوااسکریپت
۶شیوهٔ نوشتن دستورات در جاوااسکریپت
۷نظرات یا کامنت‌ها (Comments) در جاوااسکریپت
۸متغیرها در جاوااسکریپت
۹عملگرهای جاوااسکریپت
۱۰عملگرهای ریاضی در جاوااسکریپت
۱۱عملگرهای مقداردهی در جاوااسکریپت
۱۲انواع داده‌ها در جاوااسکریپت
۱۳توابع در جاوااسکریپت
۱۴اشیاء (object) در جاوااسکریپت
۱۵رویدادها در جاوااسکریپت
۱۶رشته‌های متنی (string) در جاوااسکریپت
۱۷متدهای نوع داده متنی یا رشته‌ای در جاوااسکریپت
۱۸اعداد در جاوااسکریپت
۱۹متدهای داده‌های عددی در جاوااسکریپت
۲۰آرایه‌ها در جاوااسکریپت
۲۱متدهای آرایه در جاوااسکریپت
۲۲مرتب‌سازی آرایه‌ها در جاوااسکریپت
۲۳متدهای پیمایش آرایه در جاوااسکریپت
۲۴اشیاء تاریخ و زمان در جاوااسکریپت
۲۵فرمت‌های تاریخ و زمان در جاوااسکریپت
۲۶متدهای دریافت تاریخ و زمان در جاوااسکریپت
۲۷متدهای تنظیم زمان و تاریخ در جاوااسکریپت
۲۸شی ریاضی (Math) در جاوااسکریپت
۲۹ایجاد عدد تصادفی در جاوااسکریپت
۳۰مقادیر بولین (Booleans) در جاوااسکریپت
۳۱عملگرهای منطقی و مقایسه‌ای در جاوااسکریپت
۳۲ساختار if else و else if در جاوااسکریپت
۳۳تکه کد Switch در جاوا اسکریپت
۳۴حلقه For در جاوااسکریپت
۳۵حلقه While در جاوااسکریپت
۳۶کلمات کلیدی Break و Continue در جاوااسکریپت
۳۷تبدیل نوع داده‌ها در جاوااسکریپت
۳۸عملیات‌های بیتی در جاوااسکریپت
۳۹عبارات با قاعده در جاوااسکریپت
۴۰خطاها در جاوااسکریپت - رخ دادن خطا و رفع آن
۴۱Scope در جاوااسکریپت
۴۲Hoisting یا جا به جایی کدها در جاوااسکریپت
۴۳استفاده از مد یا حالت سخت‌گیرانه (use strict) در جاوااسکریپت
۴۴کلمه کلیدی This در جاوااسکریپت
۴۵کلمه کلیدی Let در جاوااسکریپت
۴۶ثابت‌ها در جاوااسکریپت
۴۷تعریف توابع به صورت پیکان
۴۸کلاس‌ها در جاوااسکریپت
۴۹اشکال‌زدایی در جاوااسکریپت
۵۰راهنمای استایل و استانداردهای کدنویسی در جاوااسکریپت
۵۱بهترین تمرینات جاوااسکریپت
۵۲اشتباهات رایج در برنامه‌نویسی جاوااسکریپت
۵۳کارایی در جاوااسکریپت
۵۴کلمات رزرو شده در جاوااسکریپت
۵۵ورژن‌های جاوااسکریپت
۵۶ECMAScript 5 - JavaScript 5
۵۷ECMAScript 6 - ECMAScript 2015
۵۸جیسون (JSON) در جاوااسکریپت
فرم‌ها
۱فرم‌ها در جاوااسکریپت
۲API ارزشیابی در جاوااسکریپت
اشیاء (Object)
۱اشیاء در جاوااسکریپت
۲ویژگی‌های اشیاء در جاوااسکریپت
۳متدهای اشیاء در جاوااسکریپت
۴روش‌های دسترسی به شیء در جاوااسکریپت
۵سازنده‌های شیء در جاوااسکریپت
۶شکل اصلی شیء در جاوااسکریپت
۷متدهای شیء در ورژن ES5 جاوااسکریپت
تابع
۱تعریف تابع در جاوااسکریپت
۲پارامتر توابع در جاوااسکریپت
۳فراخوانی تابع در جاوااسکریپت
۴صدا کردن تابع در جاوااسکریپت
۵تابع Apply در جاوااسکریپت
۶بسته‌ها (به انگلیسی: Closures) در جاوااسکریپت
HTML DOM
۱HTML DOM در جاوااسکریپت
۲متدهای HTML DOM در جاوااسکریپت
۳HTML DOM Document در جاوااسکریپت
۴عناصر HTML DOM در جاوااسکریپت
۵reeeeeeeeeeeeeeee
۶تست
۷تست
۸تست
۹تست
۱۰تست
۱۱تست
۱۲تست
۱۳تست


عبارت​try​به شما اجازه می‌دهد بلاکی از کد را برای خطاها بررسی کنید. [۱]

عبارت​catch​به شما اجازه می‌دهد که خطا را مدیریت کنید.

عبارت​throw​به شما اجازه می‌دهد یک خطای شخصی‌سازی شده ایجاد کنید.

عبارت​finally​به شما اجازه می‌دهد بعد از بلاک‌های Try و catch بدون در نظر گرفتن نتایج آن‌ها، کد خود را اجرا کنید.

خطاها اتفاق خواهند افتاد!

در زمان اجرای کدهای جاوااسکریپت، خطاهای مختلفی می‌توانند رخ دهند.

خطاها می‌توانند خطاهای کد باشند که توسط برنامه‌نویس ایجاد شده‌اند، خطاهایی به خاطر ورود داده اشتباه و سایر موارد.

مثال

در این مثال، ما یک هشدار را به صورت adddlert برای ایجاد یک خطا، ایجاد کرده‌ایم:

<p id="demo"></p>

<script>
try {
  adddlert("Welcome guest!");
}
catch(err) {
  document.getElementById("demo").innerHTML = err.message;
}
</script>


دستور Try و catch در جاوااسکریپت

عبارت​try​به شما این اجازه می‌دهد که بلاکی از کد را در زمان اجرا برای یافتن خطاهایش بررسی کنید.

The statement allows you to define a block of code to be executed, if an error occurs in the try block.

عبارت​catch​به شما این اجازه را می‌دهد که یک بلاک از کد را برای زمانی که یک خطا در بلاک Try رخ داد، مشخص کنید.عبارت‌های جاوااسکریپت یعنی​try​و​catch​با هم نوشته می‌شوند:

try {
  Block of code to try
}
catch(err) {
  Block of code to handle errors
}

ایجاد خطاها در جاوااسکریپت

زمانی که یک خطا رخ می‌دهد، به صورت عادی جاوااسکریپت اجرای کد را متوقف می‌کند و یک پیغام خطا ایجاد می‌کند.

این عمل جاوااسکریپت را ایجاد یک خطا یا (throw an error) می‌نامند.

عبارت throw

عبارت​throw​به شما این اجازه را می‌دهد که یک خطای شخصی‌سازی شده ایجاد کنید. از نظر فنی، شما می‌توانید یک خطا ایجاد کنید.

خطا می‌تواند یک رشته متنی​String​، یک عدد​Number​، یک بولین​Boolean​ یا یک شی​Object​ باشد:

throw "Too big";    // throw a text
throw 500;          // throw a number

اگر شما از کلمه​throw​به همراه​try​و​catch​استفاده کنید، شما می‌توانید جریان برنامه را کنترل کنید و پیغام خطاهای شخصی‌سازی شده ایجاد کنید.

مثال بررسی داده ورودی

در این مثال مقدار ورودی بررسی می‌شود. اگر مقدار ورودی غلط باشد یک خطا (exception) ایجاد می‌شود.

خطا یا Exception توسط بلاک Catch دریافت می‌شود و یک پیغام خطای شخصی‌سازی شده نمایش پیدا می‌کند:

<!DOCTYPE html>
<html>
<body>

<p>Please input a number between 5 and 10:</p>

<input id="demo" type="text">
<button type="button" onclick="myFunction()">Test Input</button>
<p id="p01"></p>

<script>
function myFunction() {
  var message, x;
  message = document.getElementById("p01");
  message.innerHTML = "";
  x = document.getElementById("demo").value;
  try {
    if(x == "") throw "empty";
    if(isNaN(x)) throw "not a number";
    x = Number(x);
    if(x < 5) throw "too low";
    if(x > 10) throw "too high";
  }
  catch(err) {
    message.innerHTML = "Input is " + err;
  }
}
</script>

</body>
</html>

اعتبار سنجی در HTML

کد بالا فقط یک مثال است.

مرورگرهای مدرن اغلب از مجموعه ای از اعتبارسنجی‌های درونی جاوااسکریپت و html با استفاده از قوانین اعتبار سنجی از قبل تعریف شده در ویژگی‌ها یا Attribute های HTML استفاده می‌کنند:

<input id="demo" type="number" min="5" max="10" step="1">

شما می‌توانید مطالب بیشتری را در مورد اعتبارسنجی‌ها در فصل‌های آینده این آموزش بخوانید.

عبارت finally

عبارت​finally​به شما اجازه می‌دهد بعد از بلاک Try و Catch بدون توجه به نتیجه آن‌ها کد مورد نظر خود را اجرا کنید:

شیوهٔ نوشتار

try {
  Block of code to try
}
catch(err) {
  Block of code to handle errors
}
finally {
  Block of code to be executed regardless of the try / catch result
}

مثال

function myFunction() {
  var message, x;
  message = document.getElementById("p01");
  message.innerHTML = "";
  x = document.getElementById("demo").value;
  try {
    if(x == "") throw "is empty";
    if(isNaN(x)) throw "is not a number";
    x = Number(x);
    if(x > 10) throw "is too high";
    if(x < 5) throw "is too low";
  }
  catch(err) {
    message.innerHTML = "Error: " + err + ".";
  }
  finally {
    document.getElementById("demo").value = "";
  }
}

شیء خطا (به انگلیسی: Error Object)

به صورت پیشفرض جاوااسکریپت یک شی خطا یا Error دارد که زمانی یک ارور رخ می‌دهد، اطلاعاتی را در مورد خطا به ما ارائه می‌دهد.

شی خطا یا Error دو ویژگی پر استفاده دارد: نام و پیام

ویژگی‌های شیء خطا (به انگلیسی: Error Object)

ویژگی توضیحات
Name نام خطا را می‌توان تنظیم کرد یا نام خطای رخ داده شده را به ما برمی‌گرداند.
Message پیغام خطا را می‌توان تنظیم کرد یا پیغام خطای رخ داده شده را به ما برمی‌گرداند.

مقادیر ویژگی Name شیء خطا (به انگلیسی: Error Object)

۶ نوع مقدار متفاوت می‌تواند توسط ویژگی name خطا یا Error به ما برگردانده شود:

نام خطا توضیحات
EvalError یک ارور یا خطا در تابع eval() رخ داده‌است.
RangeError یک عدد خارج از محدوده مجاز قرار دارد.
ReferenceError مشکل دسترسی به مرجع وجود دارد.
SyntaxError شیوه نوشتن دستور مشکل دارد.
TypeError خطای مربوط به نوع داده رخ داده‌است.
URIError یک خطا در متد encodeUri() رخ داده‌است.

۶ مقدار متفاوت بالا در ادامه توضیح داده شده‌اند.

خطای Eval

یک خطای​EvalError​مشخص می‌کند که در تابع​eval()​یک خطا رخ داده‌است.


خطای Range (به فارسی: محدوده)

یک خطای​RangeError​زمانی رخ می‌دهد که یک عدد از محدوده قانونی خود خارج باشد.

برای مثال: شما نمی‌توانید تعداد ارقام مهم یک عدد را برابربا ۵۰۰ قرار دهید.

مثال

var num = 1;
try {
  num.toPrecision(500);   // A number cannot have 500 significant digits
}
catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}

خطای Refrence (به فارسی: مرجع)

یک​ReferenceError​ زمانی رخ می‌دهد که شما از متغیری که تعریف نشده‌است در برنامه خود استفاده کنید:

مثال

var x;
try {
  x = y + 1;   // y cannot be referenced (used)
}
catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}

خطای شیوه نوشتار (به انگلیسی: syntax)

یک خطای نوشتار یا​SyntaxError​ زمانی رخ می‌دهد که شما سعی کنید یک کد را با یک خطای نوشتاری اجرا کنید.

مثال

try {
  eval("alert('Hello)");   // Missing ' will produce an error
}
catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}

خطای نوع (به انگلیسی: Type)

یک خطای نوع یا​TypeError​ زمانی رخ می‌دهد که شما از مقداری استفاده کنید که از محدوده نوع داده‌های مجاز خارج باشد:

مثال

var num = 1;
try {
  num.toUpperCase();   // You cannot convert a number to upper case
}
catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}

URI (تعیین‌کنندهٔ هویت منبع یکنواخت)

یک خطای ​URIError​زمانی اتفاق می‌افتد که شما از کاراکترهای غیرقابل قبول در یک تابع URI استفاده کنید:

مثال

try {
  decodeURI("%%%");   // You cannot URI decode percent signs
}
catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}

ویژگی‌های غیر استاندارد شیء خطا (به انگلیسی: Error Object)


مرجع کامل خطا در جاوااسکریپت

برای مشاهده مرجع کامل از شی خطا یا Object می‌توانید مقاله ما را تحت عنوان مرجع کامل خطا یا Error در جاوااسکریپت بخوانید.

منابع آموزشی