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

از ویکی کد
پرش به ناوبری پرش به جستجو
میانبر:
الگو:اصلاح جدول

الگو:منو عمودی جاوااسکریپت


عبارت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 در جاوااسکریپت بخوانید.

منابع آموزشی

الگو:منو افقی جاوااسکریپت