ترجمه‌ی خطاها در JavaScript - Throw و Try to Catch

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

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

throw این دستور اجازه می‌دهد تا خطای سفارشی ایجاد کنید.

finally اجازه می‌دهد تا کد را اجرا کنید، در حالی که در پس از try و catch، بدون توجه به نتیجه.

خطا همیشه رخ می‌دهد!

در هنگام اجرای کد JavaScript، خطاهای مختلفی رخ می‌دهد.

خطا می‌تواند به دلیل خطای کدنویسی برنامه‌نویس، خطای ورودی یا مشکلات غیرقابل پیش‌بینی دیگر باشد.

مثال

در این مثال، ما از alert کد هشدار برای ایجاد خطا به صورت عمدی نوشته شده است:

<p id="demo"></p>
<script>
try {
    alert("به وب‌سایت خوش آمدید!");
}
catch(err) {
    document.getElementById("demo").innerHTML = err.message;
}
</script>

آزمایش کنید

JavaScript خطای alert را به عنوان یک خطا می‌گیرد و سپس کد برای مدیریت آن را اجرا می‌کند.

try و catch در JavaScript

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

catch عبارت اجازه می‌دهد تا یک بلاک کد برای اجرا تعریف کنید، اگر در بلاک کد try خطایی رخ دهد.

جملات JavaScript try و catch ظاهر شدن به صورت جفت:

try {
     بلاک کد برای تست
}
 catch(err) {
     بلاک کد برای مدیریت خطا
} 

JavaScript خطای می‌اندازد

وقتی که خطا رخ می‌دهد، معمولاً JavaScript متوقف شده و پیام خطایی تولید می‌کند.

این اصطلاح به این صورت توضیح داده می‌شود:JavaScript استثنا پرتاب می‌کند (اشتباه پرتاب می‌کند).

در واقع JavaScript یک استثنا (اشتباه) با دو ویژگی ایجاد می‌کند: شیء Error:name و message.

دستور throw

throw این دستور اجازه می‌دهد تا خطای سفارشی ایجاد کنید.

技术上 شما می‌توانیداستثنا پرتاب کردن (اشتباه پرتاب کردن).

استثنا می‌تواند یک رشته، عدد، بولین یا شیء JavaScript باشد:

throw "Too big";    // متن پرتاب می‌شود
throw 500;          // استثنا پرتاب می‌شود

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

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

در این مثال ورودی را بررسی می‌کند. اگر مقدار اشتباه باشد، استثنا (err) را پرتاب می‌کند.

این استثنا (err) توسط دستور catch گرفته شده و یک پیام خطای سفارشی نمایش داده می‌شود:

<!DOCTYPE html>
<html>
<body>
<p>لطفاً عددی بین 5 و 10 وارد کنید:</p>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">ورودی را تست کنید</button>
<p id="message"></p>
<script>
function myFunction() {
    var message, x;
    message = document.getElementById("message");
    message.innerHTML = "";
    x = document.getElementById("demo").value;
    try { 
        if(x == "") throw "خالی";
         if(isNaN(x)) throw "عدد نیست";
         x = Number(x);
        if(x < 5) throw  "بسیار کوچک";
        if(x > 10) throw "بسیار بزرگ";
    }
    catch(err) {
        message.innerHTML = "ورودی است " + err;
    }
}
</script>
</body>
</html> 

آزمایش کنید

بررسی HTML

این کد تنها یک مثال است.

مرورگرهای مدرن معمولاً JavaScript را با بررسی‌های HTML داخلی ترکیب می‌کنند، از طریق استفاده از قوانین بررسی پیش‌تعریف شده در ویژگی‌های HTML:

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

شما در بخش‌های بعدی این آموزش بیشتر درباره بررسی فرم‌ها یاد خواهید گرفت.

عبارت finally

finally این دستور اجازه می‌دهد تا کد را در پس از try و catch اجرا کنید، بدون توجه به نتایج:

try {
     // کد بلوکی برای تست
}
 catch(err) {
     // کد بلوکی برای مدیریت خطاها
} 
finally {
     // هر کد بلوکی که بدون توجه به نتایج اجرا می‌شود
}

مثال

function myFunction() {
    var message, x;
    message = document.getElementById("message");
    message.innerHTML = "";
    x = document.getElementById("demo").value;
    try { 
        if(x == "") throw "خالی است";
        if(isNaN(x)) throw "عدد نیست";
         x = Number(x);
        if(x >  10) throw "خیلی بزرگ";
        if(x <  5) throw "خیلی کوچک";
    }
    catch(err) {
        message.innerHTML = "خطا: " + err + ".";
    }
    finally {
        document.getElementById("demo").value = "";
    }
}

آزمایش کنید

شیء Error

شیء Error داخلی JavaScript هنگام رخ دادن خطا اطلاعات خطا را ارائه می‌دهد.

شیء error دو ویژگی مفید ارائه می‌دهد:name و message.

ویژگی‌های شیء Error

ویژگی توضیح
name تنظیم یا بازگرداندن نام خطا
message تنظیم یا بازگرداندن پیام خطا (یک رشته)

Error Name Values

ویژگی name属性 error می‌تواند شش مقدار مختلف بازمی‌گرداند:

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

در اینجا شش نوع مختلف از این ارزش‌ها را توضیح می‌دهم.

خطای Eval

EvalError خطایی در داخل تابع eval() تولید نمی‌کند.

نسخه‌های به‌روز JavaScript هیچ‌گونه EvalErrorلطفاً از SyntaxError مستبدل شود.

خطای محدوده

RangeError این خطاها در زمان استفاده از اعداد خارج از محدوده قانونی رخ می‌دهند.

مثلاً: شما نمی‌توانید تعداد دقت اعداد را به 500 تنظیم کنید.

مثال

var num = 1;
try {
    num.toPrecision(500);   // عدد نمی‌تواند 500 عدد معتبر داشته باشد
 }
catch(err) {
    document.getElementById("demo").innerHTML = err.name;
} 

آزمایش کنید

خطای استفاده

اگر شما از متغیری که هنوز تعریف نشده است (استفاده) کنید، ReferenceError این خطاها پخش می‌شوند:

مثال

var x;
try {
    x = y + 1;   // y قابل استفاده نیست (استفاده)
 }
catch(err) {
    document.getElementById("demo").innerHTML = err.name;
} 

آزمایش کنید

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

اگر شما کدی با خطای دستورات محاسبه کنید، SyntaxError تخریب‌شده:

مثال

try {
    eval("alert('Hello)");   // کمبود ' باعث بروز خطا می‌شود
}
catch(err) {
     document.getElementById("demo").innerHTML = err.name;
} 

آزمایش کنید

خطای نوع

اگر مقدار مورد استفاده شما در محدوده مقدار مورد انتظار نیست، TypeError تخریب‌شده:

مثال

var num = 1;
try {
    num.toUpperCase();   // شما نمی‌توانید عدد را به حروف بزرگ تبدیل کنید
 }
catch(err) {
    document.getElementById("demo").innerHTML = err.name;
} 

آزمایش کنید

خطای URI

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

مثال

try {
    decodeURI("%%%");   // شما نمی‌توانید این درصد‌ها را برای URI کدگذاری کنید
 }
catch(err) {
    document.getElementById("demo").innerHTML = err.name;
} 

آزمایش کنید

ویژگی‌های غیر استاندارد Error اشیاء

Mozilla و Microsoft ویژگی‌های غیر استاندارد error اشیاء را تعریف کرده‌اند:

  • fileName (Mozilla)
  • lineNumber (Mozilla)
  • columnNumber (Mozilla)
  • stack (Mozilla)
  • description (Microsoft)
  • number (Microsoft)

لطفاً از این ویژگی‌ها در وب‌سایت‌های عمومی استفاده نکنید. این ویژگی‌ها در تمام مرورگرها کار نمی‌کنند.