ترجمهی خطاها در JavaScript - Throw و Try to Catch
- صفحه قبلی ترجیح عملگر JS
- صفحه بعدی دسترسی JS
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)
لطفاً از این ویژگیها در وبسایتهای عمومی استفاده نکنید. این ویژگیها در تمام مرورگرها کار نمیکنند.
- صفحه قبلی ترجیح عملگر JS
- صفحه بعدی دسترسی JS