English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JavaScript基础教程

JavaScript 对象

JavaScript 函数

JS HTML DOM

JS 浏览器BOM

AJAX 基础教程

JavaScript 参考手册

معالجة الأخطاء لـ JavaScript

执行JavaScript代码时,可能会发生意想不到的错误。

错误可以是程序员编写的编码错误,由于输入错误引起的错误以及其他不可预见的事情。

因此,为了处理错误,JavaScript提供了4个关键字:

  • try语句使您可以测试代码块是否存在错误

  • catch语句可让您处理错误

  • throw语句可让您创建自定义错误

  • finally语句使您可以在尝试并捕获之后执行代码,而不管结果如何

在此示例中,我们将“alert”写为“aaalert”来故意产生错误:

try {
aaalert("Hello world");
} catch(e) {
document.getElementById("result").innerHTML = e.name + "<br>" + e.message;
}
اختبار لمعرفة‹/›

发生错误时,JavaScript通常会停止运行,并创建一个具有两个属性的Error对象:name和message。

JavaScript try ... catch语句

try语句允许您定义一个代码块,该代码块在执行时将进行错误测试。

catch如果try块中发生错误,则该语句允许您定义要执行的代码块。

JavaScript语句try和catch成对出现:

try {
  //try_statements-尝试尝试的语句
catch(err){
  //catch_statements-处理错误的语句
}

جملة throw لـ JavaScript

جملة throw تطلق استثناءً مخصصًا.

جملة throw تتيح لك إنشاء استثناء مخصص. تقنيًا، يُسمى هذا بـ "إطلاق الاستثناء

يمكن أن تكون الاستثناءات في JavaScript نصوص، أرقام،布尔ية أو كائنات:

  throw "Invalid"; // توليد استثناء ذو قيمة string
  throw 32; // توليد استثناء ذو قيمة 32
  throw true; // توليد استثناء ذو قيمة true

إذا تم استخدام throw مع try وcatch، فيمكنك تحديد مسار البرنامج وتوليد رسالة خطأ مخصصة.

في هذا المثال، إذا تم تمرير أي معامل غير عدد، فإن getRectArea() سيطلق استثناءً مخصصًا:

function getRectArea(width, height) {
   if (isNaN(width) || isNaN(height)) {
  throw "Parameter is not a number!";
   }
}
try {
   getRectArea(5, 'Z');
}
catch(err) {
   document.getElementById('para').innerHTML = err;
}
اختبار لمعرفة‹/›

مثال على التحقق من المدخلات

في هذا المثال، إذا كانت القيمة خاطئة، فإنه يتم إطلاق الاستثناء (err). تقوم جملة catch بحجز الاستثناء (err) وتظهر رسالة خطأ مخصصة:

var x = document.querySelector("input").value;
try {
   if(x == "") throw "is Empty";
   if(isNaN(x)) throw "Not a Number";
   if(x > 10) throw "too High";
   if(x < 5) throw "too Low";
}
catch(err) {
   document.getElementById("para").innerHTML = "Input " + err;
}
اختبار لمعرفة‹/›

الاستatement النهائي لـ JavaScript

هذا الاستatement finally يتيح لك تنفيذ الكود بعد try وcatch بغض النظر عن النتيجة.

try {
   aaalert("Hello world");
}
catch(err) {
   document.getElementById("result").innerHTML = err;
}
finally {
   document.getElementById("result").innerHTML += "<h3>الاستatement النهائي تم تنفيذه</h3>";
}
اختبار لمعرفة‹/›

كلا جمل catch و finally إختياريتان، لكن يجب أن تستخدم واحدة منهما (أو كليهما إذا لم تكن تستخدم الاثنتين)، مع استخدام جملة try:

try {
   aaalert("Hello world");
}
finally {
   document.getElementById("result").innerHTML = "sentence executed finally";
}
اختبار لمعرفة‹/›

جسم الخطأ في JavaScript

يملك JavaScript جسم Error مدمج يقدم معلومات عن الأخطاء عند حدوثها.

يقدم جسم الخطأ خصائصين مفيدة: name و message.

خصائص جسم الخطأ

الجدول التالي يُظهر خصائص جسم Error:

السمةوصف
nameيُمكن تعيين أو العودة بالاسم
messageيُمكن تعيين أو العودة بـ رسالة الخطأ

نوع الخطأ

يمكن للسمة error name أن تعود بسبعة قيم مختلفة:

النوعوصف
EvalErrorيُمثل أخطاء حول الدالة العالمية eval()
InternalErrorيُمثل الخطأ الذي يحدث عند إطلاق خطأ داخلي في محرك JavaScript
RangeErrorيُمثل الخطأ الذي يحدث عندما يخرج متغير الرقم أو المعامل عن نطاقه المقبول
ReferenceErrorيُمثل الخطأ الذي يحدث عند إلغاء الإشارة إلى إشارة غير صالحة
SyntaxErrorيُمثل الخطأ الذي يحدث عند تحليل الكود في eval()
TypeErrorيُمثل الخطأ الذي يحدث عندما ليست المتغير أو المعامل نوعًا صالحًا
URIErrorيُمثل الخطأ الذي يحدث عند تقديم معامل غير صالح لـ encodeURI() أو decodeURI()

القسم التالي سيقوم بتوضيح كل نوع من هذه الأخطاء بشكل مفصل.

EvalError

عندeval()يتم رفع استثناء EvalError عند حدوث خطأ أثناء تنفيذ الدالة.

لكن JavaScript لم يعد يرفع هذا الخطأ، ولكن يُحافظ على هذا العنصر من أجل التوافق مع الإصدارات السابقة.

أحدث إصدارات JavaScript لا ترفع استثناءات EvalError. يستخدم SyntaxError بدلاً منها.

RangeError

عند استخدام رقم خارج نطاق القيم المسموح بها، يتم إطلاق RangeError.

على سبيل المثال، إنشاء مصفوفة بطول سالب يرفع خطأ RangeError:

try {
var arr = new Array(-1); // يرفع خطأ النطاق
}
document.getElementById("result").innerHTML = err.name + "<br>" + err.message;
}
اختبار لمعرفة‹/›

ReferenceError

عندما تحاول إدراج أو الوصول إلى متغير أو عنصر غير موجود، عادةً يرفع خطأ ReferenceError.

try {
var x = 5 + y; // يرفع خطأ الاستدلال على الاستدلال
}
document.getElementById("result").innerHTML = err.name + "<br>" + err.message;
}
اختبار لمعرفة‹/›

SyntaxError

إذا كان لديك أي مشاكل نحوية في كودك JavaScript، سيتم إطلاق SyntaxError عند تشغيله

try {
eval("alert('Hello)"); // سيتم إطلاق خطأ بسبب النقص في '
}
document.getElementById("result").innerHTML = err.name + "<br>" + err.message;
}
اختبار لمعرفة‹/›

TypeError

سيتم إطلاق TypeError عند أن يكون القيمة ليست النوع المتوقع

var num = 50;
try {
num.toUpperCase(); // لا يمكنك تحويل الرقم إلى حروف كبيرة
}
document.getElementById("result").innerHTML = err.name + "<br>" + err.message;
}
اختبار لمعرفة‹/›

URIError

سيتم إطلاق URIError عند تحديد URI غير صالح (محدد الموارد الموحدة)

try {
decodeURI("%%"); // لا يمكنك تفكير رمز النسبة المئوية في URI
}
document.getElementById("result").innerHTML = err.name + "<br>" + err.message;
}
اختبار لمعرفة‹/›

مرجع كامل للخطأ

للحصول على مرجع شامل للخصائص والأساليب، يرجى زيارةمرجع JavaScript Error.

يحتوي الجزء المشار إليه على وصفات و أمثلة لجميع خصائص Error و أنواعها.