بغض اÙÙØ¸Ø± Ø¹Ù Ù Ø¯Ù Ø±ÙØ¹ØªÙا ÙÙ Ø§ÙØ¨Ø±Ù جة Ø Ù٠بعض Ø§ÙØ£ØÙØ§Ù ØªØØªÙ٠أÙÙØ§Ø¯Ùا عÙ٠أخطاء. ÙØ¯ ØªØØ¯Ø« بسبب Ø£Ø®Ø·Ø§Ø¦ÙØ§ Ø Ø¥Ø¯Ø®Ø§Ù Ø§Ù٠ستخد٠٠عÙÙÙ Ø© ØºÙØ± ٠تÙÙØ¹Ø© Ø ÙØ§Ø³ØªØ¬Ø§Ø¨Ø© خاطئة ÙÙØ®Ø§Ø¯Ù Ø ÙÙØ¢ÙØ§Ù Ø§ÙØ£Ø³Ø¨Ø§Ø¨ Ø§ÙØ£Ø®Ø±Ù.
عادة âÙØªØ¹Ø·Ùâ Ø§ÙØ¨Ø±ÙØ§Ù ج ÙÙ ØØ§ÙØ© ØØ¯ÙØ« خطأ (ÙØªÙÙÙ ÙÙØ±Ùا) Ø Ù Ø¹ ظÙÙØ± Ø§ÙØ®Ø·Ø£ ÙÙ ÙØØ¯Ø© Ø§ÙØªØÙÙ .
ÙÙÙ ÙÙØ§Ù Ø¨ÙØ§Ø¡ Ø¨ÙØ§Ø¡ جÙ
ÙØ© ÙØ³Ù
Ù try...catch ÙØ³Ù
Ø ÙÙØ§ Ø¨Ù âØ§ÙØªÙØ§Ø·â Ø§Ùأخطاء ØØªÙ ÙÙ
ÙÙ ÙÙÙØµ Ø£Ù ÙÙØ¹Ù Ø´ÙØ¦Ùا Ø£ÙØ«Ø± Ù
عÙÙÙÙØ© Ø¨Ø¯ÙØ§Ù Ù
Ù Ø§ÙØ§ÙÙÙØ§Ø±.
Ø¨ÙØ§Ø¡ tryâ¦catch
ÙØªÙÙÙ Ø¨ÙØ§Ø¡ tryâ¦catch Ù
Ù Ù
ÙÙÙÙÙ Ø±Ø¦ÙØ³ÙÙÙ: try Ù catch.
try {
// code...
} catch (err) {
// error handling
}
ÙØ¹Ù Ù ÙØ§ÙتاÙÙ:
- Ø£ÙÙØ§ÙØ ÙØªÙ
تÙÙÙØ° Ø§ÙØ´Ùرة داخÙ
try {...}. - إذا ÙÙ
ØªØØ¯Ø« Ø£Ø®Ø·Ø§Ø¡Ø ÙØªÙ
تجاÙÙ
catch (err)Ø ÙÙØªÙ استÙ٠ا٠تÙÙÙØ° Ø§ÙØ´Ùرة داخÙtryÙØ§ÙØ§ÙØªÙا٠إÙÙ Ø§ÙØ®Ø·ÙØ© Ø§ÙØªØ§ÙÙØ©. - إذا ØØ¯Ø« Ø®Ø·Ø£Ø ÙØ¥Ù تÙÙÙØ°
tryÙØªÙÙÙØ ÙÙØªÙ ÙÙÙ Ø§ÙØªØÙ٠إÙÙ Ø¨Ø¯Ø§ÙØ©catch (err)Ø ÙØ³ØªØØªÙ٠اÙÙ ØªØºÙØ±err(ÙÙ Ù٠استخدا٠أ٠اس٠آخر) عÙÙ ÙØ§Ø¦Ù خطأ ÙØØªÙ٠عÙÙ ØªÙØ§ØµÙÙ ØÙ٠٠ا ØØ¯Ø«.
ÙØ¹Ù
Ø Ø§ÙØ®Ø·Ø£ Ø¯Ø§Ø®Ù ÙØªÙØ© try {...} ÙØ§ ÙØ¤Ø¯Ù Ø¥Ù٠إÙÙØ§Ù تشغÙÙ Ø§ÙØ¨Ø±ÙاÙ
ج Ø¨Ù ÙØªÙØ ÙÙØ§ ÙØ±ØµØ© Ø§ÙØªØ¹Ø§Ù
Ù Ù
ع٠ÙÙ catch.
دعÙÙØ§ ÙÙÙÙ ÙØ¸Ø±Ø© عÙ٠بعض Ø§ÙØ£Ù Ø«ÙØ©.
-
٠ثا٠بدÙ٠أخطاء: ÙØ¸Ùر
alert(1)Ùalert(2):try { alert('Ø¨Ø¯Ø§ÙØ© ع٠٠try'); // (1) <-- // ...ÙØ§ ØªÙØ¬Ø¯ أخطاء ÙÙØ§ alert('ÙÙØ§ÙØ© ع٠٠try'); // (2) <-- } catch (err) { alert('ب٠ا Ø£ÙÙ ÙØ§ ØªÙØ¬Ø¯ أخطاء , ت٠تجاÙÙ Catch'); // (3) } -
٠ثا٠٠ع ÙØ¬Ùد خطأ: ÙØ¸Ùر
alert(1)Ùalert(3):try { alert('Ø¨Ø¯Ø§ÙØ© ع٠٠try'); // (1) <-- lalala; // خطأ Ø ÙÙ ÙØªÙ تعرÙ٠اÙÙ ØªØºÙØ±! alert('ÙÙØ§ÙØ© ع٠٠try (ÙÙ ÙØ´ØªØºÙ)'); // (2) } catch (err) { alert(`ØØ¯Ø« خطأ !`); // (3) <-- }
try...catch ÙØ¹Ù
Ù ÙÙØ· ÙØ£Ø®Ø·Ø§Ø¡ ÙÙØª Ø§ÙØªØ´ØºÙÙÙÙ ÙØ¹Ù ٠إذا ÙØ§Ù اÙÙÙØ¯ Ø®Ø§Ø·Ø¦ÙØ§ ٠٠اÙÙØ§ØÙØ© اÙÙØÙÙØ© Ø Ø¹Ù٠سبÙ٠اÙÙ Ø«Ø§Ù ÙØØªÙ٠عÙ٠أÙÙØ§Ø³ ٠٠عÙÙØ§Øª ÙØ§Ùصة:
try {
{{{{{{{{{{{{
} catch (err) {
alert("اÙÙ
ØØ±Ù ÙØ§ ÙØ³ØªØ·Ùع ÙÙÙ
ÙØ°Ø§ اÙÙÙØ¯Ø ÙÙÙ ØºÙØ± ØµØ§ÙØ");
}
ÙÙØ±Ø£ Ù ØØ±Ù JavaScript اÙÙÙØ¯ Ø£ÙÙØ§Ù Ø Ø«Ù ÙØ´ØºÙÙØ§. ØªØ³Ù Ù Ø§ÙØ£Ø®Ø·Ø§Ø¡ Ø§ÙØªÙ ØªØØ¯Ø« Ù٠٠رØÙØ© اÙÙØ±Ø§Ø¡Ø© بأخطاء âÙÙØª Ø§ÙØªØÙÙÙâ ÙÙØ§ ÙÙ ÙÙ Ø¥ØµÙØ§ØÙا (Ù Ù Ø¯Ø§Ø®Ù ÙØ°Ø§ اÙÙÙØ¯). ذÙÙ ÙØ£Ù اÙÙ ØØ±Ù ÙØ§ ÙØ³ØªØ·Ùع ÙÙ٠اÙÙÙØ¯.
ÙØ°Ø§Ø ÙÙ
ÙÙ ÙÙ try...catch ÙÙØ· Ø§ÙØªØ¹Ø§Ù
Ù Ù
ع Ø§ÙØ£Ø®Ø·Ø§Ø¡ Ø§ÙØªÙ ØªØØ¯Ø« ÙÙ Ø§ÙØ´Ùرة Ø§ÙØµØÙØØ©. ÙØªØ³Ù
Ù ÙØ°Ù Ø§ÙØ£Ø®Ø·Ø§Ø¡ âØ£Ø®Ø·Ø§Ø¡ ÙÙØª Ø§ÙØªØ´ØºÙÙâ Ø£Ù Ù٠بعض Ø§ÙØ£ØÙØ§Ù âØ§ÙØ§Ø³ØªØ«Ùاءاتâ.
try...catch ÙØ¹Ù
٠بشÙÙ Ù
تزاÙ
ÙØ¥Ø°Ø§ ØØ¯Ø« Ø§Ø³ØªØ«ÙØ§Ø¡ Ù٠اÙÙÙØ¯ âØ§ÙÙ
جدÙÙâØ Ù
ث٠ÙÙ setTimeoutØ ÙÙÙ ÙÙ
ÙÙ ÙÙ try...catch Ø§ÙØªÙاطÙ:
try {
setTimeout(function() {
noSuchVariable; // Ø³ÙØªÙÙÙ Ø§ÙØ¨Ø±ÙاÙ
ج ÙÙØ§
}, 1000);
} catch (err) {
alert( "won't work" );
}
ÙØ°Ø§ ÙØ£Ù Ø§ÙØ¯Ø§ÙØ© تÙÙØ° ÙÙ ÙÙØª ÙØ§ØÙØ Ø¹ÙØ¯Ù
ا ÙÙÙ٠اÙÙ
ØØ±Ù ÙØ¯ ØªØ±Ù Ø¨ÙØ§Ø¡ try...catch.
ÙÙØªÙاط Ø§Ø³ØªØ«ÙØ§Ø¡ Ø¯Ø§Ø®Ù Ø¯Ø§ÙØ© Ù
جدÙÙØ©Ø ÙØ¬Ø¨ Ø£Ù ÙØªÙ
ÙØ¶Ø¹ try...catch داخ٠تÙÙ Ø§ÙØ¯Ø§ÙØ©:
setTimeout(function() {
try {
noSuchVariable; // تتعاÙ
٠اÙÙ try...catch Ù
ع Ø§ÙØ®Ø·Ø£!
} catch {
alert( "تÙ
Ø§ÙØªÙاط Ø§ÙØ®Ø·Ø£ ÙÙØ§!" );
}
}, 1000);
اÙÙØ§Ø¦Ù Ø§ÙØ®Ø·Ø£
Ø¹ÙØ¯ ØØ¯ÙØ« خطأ Ø ÙÙÙÙ
JavaScript Ø¨Ø¥ÙØ´Ø§Ø¡ ÙØ§Ø¦Ù ÙØØªÙ٠عÙÙ ØªÙØ§ØµÙ٠خاصة بÙ. Ø«Ù
ÙØªÙ
تÙ
Ø±ÙØ± اÙÙØ§Ø¦Ù ÙÙØ³Ùطة ÙÙ catch:
try {
// ...
} catch (err) {
// <-- ÙØ§Ø¦Ù Ø§ÙØ®Ø·Ø£Ø ÙÙ
Ù٠استخداÙ
ÙÙÙ
Ø© Ø£Ø®Ø±Ù Ø¨Ø¯ÙØ§Ù Ù
Ù err
// ...
}
باÙÙØ³Ø¨Ø© ÙØ¬Ù ÙØ¹ Ø§ÙØ£Ø®Ø·Ø§Ø¡ اÙÙ Ø¶Ù ÙØ© Ø ÙØØªÙÙ ÙØ°Ø§ اÙÙØ§Ø¦Ù عÙÙ Ø®Ø§ØµÙØªÙÙ Ø±Ø¦ÙØ³ÙتÙÙ:
name- اسÙ
Ø§ÙØ®Ø·Ø£. عÙ٠سبÙ٠اÙÙ
Ø«Ø§Ù Ø ÙÙ
ØªØºÙØ± ØºÙØ± Ù
ØØ¯Ø¯ Ø ÙØ°Ø§
"ReferenceError". message- Ø±Ø³Ø§ÙØ© ÙØµÙØ© ØÙÙ ØªÙØ§ØµÙÙ Ø§ÙØ®Ø·Ø£.
ÙÙØ§Ù خصائص Ø£Ø®Ø±Ù ØºÙØ± ÙÙØ§Ø³ÙØ© Ù ØªØ§ØØ© ÙÙ Ù Ø¹Ø¸Ù Ø§ÙØ¨Ùئات. ÙØ§ØØ¯Ø© Ù Ù Ø§ÙØ£Ùثر Ø§Ø³ØªØ®Ø¯Ø§Ù ÙØ§ ÙØ¯Ø¹Ù ÙØ§ ÙÙ:
stack- Ù ÙØ¯Ø³ Ø§ÙØ§Ø³ØªØ¯Ø¹Ø§Ø¡ Ø§ÙØØ§ÙÙ: Ø³ÙØ³ÙØ© ØªØØªÙ٠عÙ٠٠عÙÙ٠ات ØÙÙ ØªØ³ÙØ³Ù Ø§ÙØ¥Ø³ØªØ¯Ø¹Ø§Ø¡Ø§Øª اÙÙ ØªØ¯Ø§Ø®ÙØ© Ø§ÙØªÙ أدت Ø¥ÙÙ Ø§ÙØ®Ø·Ø£. ØªØ³ØªØ®Ø¯Ù ÙØ£ØºØ±Ø§Ø¶ Ø§ÙØªØµØÙØ.
عÙ٠سبÙ٠اÙ٠ثاÙ:
try {
lalala; // Ø®Ø·Ø£Ø Ø§ÙÙ
ØªØºÙØ± ØºÙØ± Ù
عرÙ!
} catch (err) {
alert(err.name); // ReferenceError
alert(err.message); // lalala is not defined
alert(err.stack); // ReferenceError: lalala is not defined at (...call stack)
// ÙÙ
ÙÙ Ø£ÙØ¶Ùا عرض Ø§ÙØ®Ø·Ø£ بشÙÙ ÙØ§Ù
Ù
// ÙØªÙ
تØÙÙÙ Ø§ÙØ®Ø·Ø£ Ø¥ÙÙ Ø³ÙØ³ÙØ© ÙØµÙØ© باسÙ
"name: message"
alert(err); // ReferenceError: lalala is not defined
}
âcatchâ Ø¯ÙÙ Ù ØªØºÙØ±
إذا ÙÙ
ÙÙÙ Ø¨ØØ§Ø¬Ø© Ø¥ÙÙ ØªÙØ§ØµÙÙ Ø§ÙØ®Ø·Ø£, catch ÙÙ
ÙÙ Ø£Ù ØªØØ«ÙÙ:
try {
// ...
} catch {
// <-- بدÙÙ (err)
// ...
}
استخدا٠âtryâ¦catchâ
Letâs explore a real-life use case of try...catch.
Ù٠ا ÙØ¹Ù٠باÙÙØ¹Ù, JavaScript تدع٠JSON.parse(str) ÙÙØ±Ø§Ø¡Ø© ÙÙÙ Ø© JSON-encoded.
عادة ÙØªÙ استخدا٠٠ÙÙ٠تشÙÙØ± Ø§ÙØ¨ÙØ§ÙØ§Øª اÙ٠ستÙÙ Ø© عبر Ø§ÙØ´Ø¨ÙØ© Ø Ù Ù Ø§ÙØ®Ø§Ø¯Ù أ٠٠صدر آخر.
ÙØªÙÙ٠ذÙÙ ÙÙØ¯Ø¹Ù JSON.parse Ù
Ø«Ù Ø§ÙØªØ§ÙÙ:
let json = '{"name":"John", "age": 30}'; // Ø§ÙØ¨ÙØ§ÙØ§Øª Ù
Ù Ø§ÙØ®Ø§Ø¯Ù
let user = JSON.parse(json); // تØÙÙ٠اÙÙØµ Ø¥ÙÙ ÙØ§Ø¦Ù JS
// Ø§ÙØ¢Ù ÙÙ ÙØ§Ø¦Ù Ù٠خصائص Ù
٠اÙÙØµ user
alert( user.name ); // John
alert( user.age ); // 30
ÙÙ ÙÙÙ Ø§ÙØ¹Ø«Ùر عÙ٠٠عÙÙ٠ات Ø£ÙØ«Ø± ØªÙØµÙÙØ§Ù ØÙÙ JSON ÙÙ ÙØµÙ اÙÙØ§Ø¦Ù json ÙÙÙÙÙØ© استخدا٠Ù.
إذا json تاÙÙ, JSON.parse ÙÙÙØ¯ خطأ, Ù âÙØªÙÙÙâ Ø§ÙØ¨Ø±ÙØ§Ù
ج.
ÙÙ ÙØ¬Ø¨ Ø£Ù ÙÙÙ٠راضÙ٠ع٠ذÙÙØ Ø¨Ø§ÙØ·Ø¨Ø¹ ÙØ§!
Ø¨ÙØ°Ù Ø§ÙØ·Ø±ÙÙØ© Ø Ø¥Ø°Ø§ ÙØ§Ù ÙÙØ§Ù خطأ ٠ا ÙÙ Ø§ÙØ¨ÙØ§ÙØ§Øª Ø ÙÙÙ ÙØ¹Ø±Ù Ø§ÙØ²Ø§Ø¦Ø± Ù Ø·ÙÙÙØ§ ذÙÙ (٠ا ÙÙ ÙÙØªØ ÙØØ¯Ø© تØÙÙ Ù Ø·ÙØ± Ø§ÙØ¨Ø±Ø§Ù ج). ÙØ§ÙÙØ§Ø³ ÙØ§ ÙØØ¨ÙÙ ØÙا Ø¹ÙØ¯Ù ا ÙØªÙÙÙ Ø´ÙØ¡ ٠ا دÙÙ Ø£Ù Ø±Ø³Ø§ÙØ© خطأ.
Letâs use try...catch to handle the error:
let json = "{ bad json }";
try {
let user = JSON.parse(json); // <-- Ø¹ÙØ¯Ù
ا ÙØØ¯Ø« خطأ...
alert( user.name ); // ÙØ§ ÙØ¹Ù
Ù
} catch (err) {
// ...the execution jumps here
alert( "Our apologies, the data has errors, we'll try to request it one more time." );
alert( err.name );
alert( err.message );
}
ÙÙØ§ ÙØ³ØªØ®Ø¯Ù
catch ÙÙØ· ÙØ¥Ø¸Ùار Ø§ÙØ±Ø³Ø§ÙØ©, ÙÙ ÙÙ
ÙÙÙØ§ اÙÙÙØ§Ù
باÙÙ
Ø²ÙØ¯: Ø¥Ø±Ø³Ø§Ù Ø·ÙØ¨ Ø´Ø¨ÙØ© Ø¬Ø¯ÙØ¯ Ø Ø§ÙØªØ±Ø§Ø بدÙÙ ÙÙØ²Ø§Ø¦Ø± Ø Ø¥Ø±Ø³Ø§Ù Ù
عÙÙÙ
ات ØÙÙ Ø§ÙØ®Ø·Ø£ Ø¥ÙÙ Ù
ÙØ´Ø£Ø© تسجÙÙ Ø â¦. ÙÙ Ø´ÙØ¡ Ø£ÙØ¶Ù Ù
٠تÙÙÙ Ø§ÙØ¨Ø±ÙاÙ
ج.
ØµÙØ§Ø¹Ø© Ø§ÙØ£Ø®Ø·Ø§Ø¡ Ø§ÙØ®Ø§ØµØ©
Ù
اذا إذا json صØÙØ Ù
٠اÙÙØ§ØÙØ© اÙÙØºÙÙØ© Ø ÙÙÙÙ ÙÙØ³ ÙÙ Ø®Ø§ØµÙØ© name ?
Ù Ø«Ù ÙØ°Ø§:
let json = '{ "age": 30 }'; // Ø¨ÙØ§Ùات ØºÙØ± Ù
ÙØªÙ
ÙØ©
try {
let user = JSON.parse(json); // <-- ÙØ§ أخطاء
alert( user.name ); // ÙØ§ ÙÙØ¬Ø¯ اسÙ
!
} catch (err) {
alert( "doesn't execute" );
}
Ø®ÙØ§ ÙØ¹Ù
Ù JSON.parse بطرÙÙØ© Ø¹Ø§Ø¯ÙØ©, ÙÙÙ ØºÙØ§Ø¨ name Ù٠اÙÙØ§Ùع Ù٠خطأ باÙÙØ³Ø¨Ø© ÙÙØ§.
Ø§ÙØªÙØÙد Ù
Ø¹Ø§ÙØ¬Ø© Ø§ÙØ£Ø®Ø·Ø§Ø¡ Ø Ø³ÙØ³ØªØ®Ø¯Ù
Ø§ÙØ¹Ø§Ù
Ù throw.
Ø§ÙØ¹Ø§Ù Ù âThrowâ
Ø§ÙØ¹Ø§Ù
Ù throw ÙÙÙØ¯ خطأ.
ÙÙÙÙ Ø¨ÙØªØ§Ø¨ØªÙ ÙØ§ÙتاÙÙ:
throw <error object>
Ù
٠اÙÙØ§ØÙØ© Ø§ÙØªÙÙÙØ©, ÙÙ
ÙÙÙØ§ استخداÙ
Ø£Ù Ø´ÙØ¡ ÙÙØ§Ø¦Ù خطأ. ÙØ¯ ÙÙÙÙ ØØªÙ بدائÙÙØ§ Ù
ث٠رÙÙ
Ø£Ù Ø³ÙØ³ÙØ© Ø ÙÙÙÙ Ù
Ù Ø§ÙØ£Ùض٠أ٠ÙÙÙÙ ÙØ§Ø¦ÙÙØ§ Ø ÙÙÙØ¶Ù Ø£Ù ÙÙÙÙ Ù
ع خصائص name Ù message (ÙÙØªÙاÙÙ Ù
ع Ø§ÙØ£Ø®Ø·Ø§Ø¡ اÙÙ
ضÙ
ÙØ©).
ÙØØªÙÙ JavaScript عÙÙ Ø§ÙØ¹Ø¯Ùد Ù
٠اÙÙ
ÙØ´Ø¦Ø§Øª اÙÙ
دÙ
جة ÙÙØ£Ø®Ø·Ø§Ø¡ اÙÙÙØ§Ø³ÙØ©: Error, SyntaxError, ReferenceError, TypeError ٠اخرÙÙ. ÙÙ
ÙÙÙØ§ استخداÙ
ÙØ§ ÙØ¥Ùشاء ÙØ§Ø¦Ùات خطأ Ø£ÙØ¶Ùا.
ÙÙÙÙ Ø¨ÙØªØ§Ø¨ØªÙÙ ÙØ§ÙتاÙÙ:
let error = new Error(message);
// or
let error = new SyntaxError(message);
let error = new ReferenceError(message);
// ...
ÙÙØ£Ø®Ø·Ø§Ø¡ اÙÙ
ضÙ
ÙØ© (ÙÙØ³ ÙØ£Ù ÙØ§Ø¦Ùات Ø ÙÙØ£Ø®Ø·Ø§Ø¡ ÙÙØ·) Ø Ø®Ø§ØµÙØ© name ÙÙ Ø¨Ø§ÙØ¶Ø¨Ø· اسÙ
اÙÙ
ÙØ´Ø¦. ÙØªØ£Ø®Ø° Ø®Ø§ØµÙØ© message Ù
Ù Ø§ÙØ¹ÙاÙ
Ù .
عÙ٠سبÙ٠اÙ٠ثاÙ:
let error = new Error('ØØ¯Ø« Ø´ÙØ¡ Ù
ا o_O');
alert(error.name); // خطأ
alert(error.message); // ØØ¯Ø« Ø´ÙØ¡ Ù
ا o_O
دعÙÙØ§ ÙØ±Ù Ø£Ù ÙÙØ¹ Ù
Ù Ø§ÙØ£Ø®Ø·Ø§Ø¡ ÙÙÙØ¯ JSON.parse:
try {
JSON.parse("{ bad json o_O }");
} catch (err) {
alert(err.name); // SyntaxError
alert(err.message); // Unexpected token b in JSON at position 2
}
ÙÙ
ا ÙØ±Ù Ø ÙØ°Ø§ ÙÙ SyntaxError.
ÙÙÙ ØØ§ÙØªÙØ§ ØºÙØ§Ø¨ name خطأ Ø ØÙØ« ÙØ¬Ø¨ Ø£Ù ÙÙÙÙ ÙØ¯Ù اÙÙ
ستخدÙ
ÙÙ name.
ÙØ°Ø§ دعÙÙØ§ ÙØ¶Ù throw:
let json = '{ "age": 30 }'; // Ø¨ÙØ§Ùات ØºÙØ± Ù
ÙØªÙ
ÙØ©
try {
let user = JSON.parse(json); // <-- ÙØ§ اخطاء
if (!user.name) {
throw new SyntaxError("Ø¨ÙØ§Ùات ØºÙØ± Ù
ÙØªÙ
ÙØ©: no name"); // (*)
}
alert( user.name );
} catch (err) {
alert( "JSON Error: " + err.message ); // JSON Error: Incomplete data: no name
}
ÙÙ Ø§ÙØ³Ø·Ø± (*), throw ÙÙÙØ¯ SyntaxError Ù
ع اÙÙ
عط٠message, بÙÙØ³ Ø§ÙØ·Ø±ÙÙØ© Ø§ÙØªÙ تÙÙØ¯Ùا JavaScript بÙÙØ³Ùا.
عÙ
Ù try ÙØªÙÙ٠عÙ٠اÙÙÙØ± Ù ÙØªÙÙ٠إÙÙ catch.
Ø§ÙØ§Ù catch Ø£ØµØ¨Ø Ù
ÙØ§ÙÙØ§ ÙØ§ØØ¯Ùا ÙÙÙ Ù
Ø¹Ø§ÙØ¬Ø© Ø§ÙØ£Ø®Ø·Ø§Ø¡: ÙÙØ§ÙÙ
ا ÙÙ JSON.parse ÙØØ§ÙØ§Øª أخرÙ.
إعادة Ø±Ù Ù Ø§ÙØ¥Ø³ØªØ«Ùاءات
Ù٠اÙÙ
Ø«Ø§Ù Ø£Ø¹ÙØ§ÙØ ÙØ³ØªØ®Ø¯Ù
try...catch ÙÙØªØ¹Ø§Ù
Ù Ù
ع Ø§ÙØ¨ÙØ§ÙØ§Øª ØºÙØ± Ø§ÙØµØÙØØ©. ÙÙÙÙ ÙÙ Ù
٠اÙÙ
Ù
ÙÙ Ø£Ù ÙØØ¯Ø« âØ®Ø·Ø£ آخر ØºÙØ± Ù
تÙÙØ¹â Ø¯Ø§Ø®Ù ÙØªÙØ© try {...}Ø Ù
ث٠خطأ ÙÙ Ø§ÙØ¨Ø±Ù
جة (Ù
ØªØºÙØ± ØºÙØ± Ù
عرÙ) Ø£Ù Ø´ÙØ¡ Ø¢Ø®Ø±Ø ÙÙÙØ³ ÙÙØ· ÙØ°Ø§ Ø§ÙØ£Ù
ر âØ§ÙØ¨ÙØ§ÙØ§Øª ØºÙØ± Ø§ÙØµØÙØØ©â.
ÙÙ Ø«ÙØ§:
let json = '{ "age": 30 }'; // Ø¨ÙØ§Ùات ØºÙØ± Ù
ÙØªÙ
ÙØ©
try {
user = JSON.parse(json); // <-- user ÙØ¨Ù "let" ÙØ³Ùت أ٠تضع
// ...
} catch (err) {
alert('JSON Error: ' + err); // JSON Error: ReferenceError: user is not defined
// (no JSON Error actually)
}
Ø¨Ø§ÙØ·Ø¨Ø¹ Ø ÙÙ Ø´ÙØ¡ Ù Ù ÙÙ! اÙ٠بر٠جÙÙ ÙØ±ØªÙبÙÙ Ø§ÙØ£Ø®Ø·Ø§Ø¡. ØØªÙ Ù٠اÙ٠راÙ٠اÙÙ ÙØªÙØØ© اÙ٠صدر Ø§ÙØªÙ ÙØ³ØªØ®Ø¯Ù ÙØ§ اÙÙ ÙØ§ÙÙÙ ÙØ¹ÙÙØ¯ â ÙØ¬Ø£Ø© ÙÙ ÙÙ Ø§ÙØªØ´Ø§Ù خطأ ÙØ¤Ø¯Ù Ø¥Ù٠اخترا٠رÙÙØ¨.
ÙÙ ØØ§ÙØªÙØ§Ø ÙØªÙ
ÙØ¶Ø¹ try...catch ÙÙØªÙاط أخطاء âØ§ÙØ¨ÙØ§ÙØ§Øª ØºÙØ± Ø§ÙØµØÙØØ©â. ÙÙÙÙ Ø¨ØØ³Ø¨ Ø·Ø¨ÙØ¹ØªÙØ ÙÙØªÙØ· catch جÙ
ÙØ¹ Ø§ÙØ£Ø®Ø·Ø§Ø¡ Ù
Ù try. ÙÙØ§ ÙØªÙ
Ø§ÙØªÙاط خطأ ØºÙØ± Ù
تÙÙØ¹Ø ÙÙÙÙ Ù
ا Ø²Ø§ÙØª Ø§ÙØ±Ø³Ø§ÙØ© ÙÙØ³Ùا âØ®Ø·Ø£ JSONâ ØªØ¸ÙØ±Ø ÙÙØ°Ø§ خاطئ ÙÙØ¬Ø¹Ù اÙÙÙØ¯ Ø£ÙØ«Ø± ØµØ¹ÙØ¨Ø© ÙÙ Ø§ÙØªØµØÙØ.
ÙØ¬Ø¨ Ø£Ù ÙÙÙÙ Catch Ø¨Ù Ø¹Ø§ÙØ¬Ø© Ø§ÙØ£Ø®Ø·Ø§Ø¡ Ø§ÙØªÙ ÙØ¹Ø±ÙÙØ§ Ù âØ¥Ø¹Ø§Ø¯Ø© ر٠Ùâ ÙÙ Ø§ÙØ¢Ø®Ø±ÙÙ ÙÙØ·.
ÙÙ ÙÙ Ø´Ø±Ø ØªÙÙÙØ© âØ¥Ø¹Ø§Ø¯Ø© Ø§ÙØ±Ù Ùâ Ø¨Ù Ø²ÙØ¯ Ù Ù Ø§ÙØªÙصÙ٠عÙ٠اÙÙØÙ Ø§ÙØªØ§ÙÙ:
-
Catch ÙØØµÙ Ø¹ÙÙ Ø¬Ù ÙØ¹ Ø§ÙØ£Ø®Ø·Ø§Ø¡.
-
ÙÙ
catch(err) {...}ÙÙÙ٠بتØÙÙÙ ÙØ§Ø¦Ù Ø§ÙØ®Ø·Ø£err. -
إذا ÙÙ ÙÙÙ ÙØ¹Ø±Ù ÙÙÙ ÙØªØ¹Ø§Ù Ù Ù Ø¹ÙØ§ Ø ÙÙÙØ¹Ù
throw err. -
Ù٠سÙ
catchØ¨Ø¬Ù ÙØ¹ Ø§ÙØ£Ø®Ø·Ø§Ø¡. -
ÙÙ ÙØªÙØ©
catch (err) {...}Ø ÙØÙÙ ÙØ§Ø¦Ù Ø§ÙØ®Ø·Ø£err. -
إذا ÙÙ ÙØ¹Ø±Ù ÙÙÙÙØ© Ø§ÙØªØ¹Ø§Ù Ù Ù Ø¹ÙØ ÙØ¥ÙÙØ§ ÙÙÙ٠بÙ
throw err.
Ø¹Ø§Ø¯Ø©ÙØ ÙÙ
ÙÙÙØ§ Ø§ÙØªØÙÙ Ù
Ù ÙÙØ¹ Ø§ÙØ®Ø·Ø£ باستخداÙ
عاÙ
Ù instanceof.
try {
user = { /*...*/ };
} catch (err) {
if (err instanceof ReferenceError) {
alert('ReferenceError'); // "ReferenceError" ÙÙÙØµÙ٠إÙÙ Ù
ØªØºÙØ± ØºÙØ± Ù
ØØ¯Ø¯
}
}
ÙÙ
ÙÙÙØ§ Ø£ÙØ¶Ùا Ø§ÙØØµÙ٠عÙ٠اسÙ
ÙØ¦Ø© Ø§ÙØ®Ø·Ø£ Ù
Ù Ø®Ø§ØµÙØ© err.name. جÙ
ÙØ¹ Ø§ÙØ£Ø®Ø·Ø§Ø¡ Ø§ÙØ£ØµÙÙØ© ÙØ¯ÙÙØ§ ÙØ°Ù Ø§ÙØ®Ø§ØµÙØ©. Ø®ÙØ§Ø± آخر ÙÙ ÙØ±Ø§Ø¡Ø© err.constructor.name.
Ù٠اÙÙÙØ¯ Ø£Ø¯ÙØ§Ù Ø ÙØ³ØªØ®Ø¯Ù
إعادة رÙ
٠بØÙØ« catch ÙØ¹Ø§Ùج ÙÙØ· SyntaxError:
let json = '{ "age": 30 }'; // Ø¨ÙØ§Ùات ØºÙØ± Ù
ÙØªÙ
ÙØ©
try {
let user = JSON.parse(json);
if (!user.name) {
throw new SyntaxError("Ø¨ÙØ§Ùات ØºÙØ± Ù
ÙØªÙ
ÙØ©: ÙØ§ ÙØ¬Ùد ÙÙ name");
}
blabla(); // خطأ ØºÙØ± Ù
تÙÙØ¹
alert( user.name );
} catch (err) {
if (err instanceof SyntaxError) {
alert( "JSON Error: " + err.message );
} else {
throw err; // rethrow (*)
}
}
إ٠رÙ
Ù Ø§ÙØ®Ø·Ø£ ÙÙ Ø§ÙØ³Ø·Ø± (*) Ù
Ù Ø¯Ø§Ø®Ù ÙØªÙØ© catch ÙØ³Ù
Ø ÙÙØ®Ø·Ø£ Ø¨Ø§ÙØ®Ø±Ùج Ù
Ù try...catch ÙÙÙ
ÙÙ Ø§ÙØªÙاط٠إÙ
ا Ø¨ÙØ§Ø³Ø·Ø© ÙÙÙÙ try...catch Ø§ÙØ®Ø§Ø±Ø¬Ù (إذا ÙØ¬Ø¯)Ø Ø£Ù Ø£ÙÙ ÙÙØªÙ اÙÙØµ Ø§ÙØ¨Ø±Ù
جÙ.
إذا catch ØªØ¹Ø§ÙØ¬ Ù٠اÙÙØ§Ùع Ø§ÙØ£Ø®Ø·Ø§Ø¡ Ø§ÙØªÙ تعر٠ÙÙ٠تتعاÙ
Ù Ù
Ø¹ÙØ§ Ù" تتخط٠"جÙ
ÙØ¹ Ø§ÙØ¢Ø®Ø±ÙÙ.
ÙÙØ¶Ø اÙÙ
Ø«Ø§Ù Ø£Ø¯ÙØ§Ù ÙÙÙ ÙÙ
ÙÙ Ø§ÙØªÙاط Ù
Ø«Ù ÙØ°Ù Ø§ÙØ£Ø®Ø·Ø§Ø¡ بÙ
ستÙ٠آخر Ù
Ù try...catch:
function readData() {
let json = '{ "age": 30 }';
try {
// ...
blabla(); // خطأ!
} catch (err) {
// ...
if (!(err instanceof SyntaxError)) {
throw err; // rethrow (don't know how to deal with it)
}
}
}
try {
readData();
} catch (err) {
alert( "External catch got: " + err ); // caught it!
}
ÙÙØ§Ø ÙØ¹Ø±Ù readData ÙÙÙÙØ© Ø§ÙØªØ¹Ø§Ù
Ù Ù
ع SyntaxError ÙÙØ·Ø بÙÙÙ
ا ÙØ¹Ø±Ù try...catch Ø§ÙØ®Ø§Ø±Ø¬Ù ÙÙÙÙØ© Ø§ÙØªØ¹Ø§Ù
Ù Ù
ع ÙÙ Ø´ÙØ¡.
tryâ¦catchâ¦finally
Ø§ÙØªØ¸Ø± Ø ÙØ°Ø§ ÙÙØ³ ÙÙ Ø´ÙØ¡.
The try...catch construct may have one more code clause: finally.
إذا ÙØ§Ù Ù ÙØ¬ÙØ¯ÙØ§ Ø ÙØ¥ÙÙ ÙØ¹Ù Ù ÙÙ Ø¬Ù ÙØ¹ Ø§ÙØØ§ÙØ§Øª:
- بعد
try, إذا Ù٠تÙÙ ÙÙØ§Ù أخطاء Ø - بعد
catch, إذا ÙØ§Ùت ÙÙØ§Ù أخطاء.
ØªØ¨Ø¯Ù Ø§ÙØµÙغة اÙÙ ÙØ³Ø¹Ø© Ù٠ا ÙÙÙ:
try {
... try to execute the code ...
} catch (err) {
... handle errors ...
} finally {
... ÙØ¹Ù
Ù Ù٠جÙ
ÙØ¹ Ø§ÙØØ§ÙØ§Øª ...
}
ØØ§Ù٠تشغÙÙ ÙØ°Ø§ اÙÙÙØ¯:
try {
alert('try');
if (confirm('Make an error?')) BAD_CODE();
} catch (err) {
alert('catch');
} finally {
alert('Ø£Ø®ÙØ±Ø§');
}
ÙØØªÙ٠اÙÙÙØ¯ عÙ٠طرÙÙØªÙÙ ÙÙØªÙÙÙØ°:
- إذا أجبت ب٠âÙØ¹Ù
â Ø¹ÙÙ âØ£Ø®Ø·Ø£ØªØâ, Ø«Ù
try -> catch -> finally. - إذا ÙÙØª âÙØ§â, Ø«Ù
try -> finally.
ØºØ§ÙØ¨Ùا Ù
ا ÙØªÙ
استخداÙ
عبارة finally Ø¹ÙØ¯Ù
ا ÙØ¨Ø¯Ø£ ÙÙ ÙØ¹Ù Ø´ÙØ¡ ÙÙØ±Ùد Ø§ÙØ§ÙØªÙØ§Ø¡ Ù
ÙÙ ÙÙ Ø£Ù ØØ§ÙØ© Ù
٠اÙÙØªØ§Ø¦Ø¬.
عÙ٠سبÙ٠اÙÙ
Ø«Ø§Ù Ø ÙØ±Ùد ÙÙØ§Ø³ اÙÙÙØª Ø§ÙØ°Ù تستغرÙÙ Ø¯Ø§ÙØ© Ø£Ø±ÙØ§Ù
ÙÙØ¨ÙÙØ§ØªØ´Ù fib(n). Ø¨Ø·Ø¨ÙØ¹Ø© Ø§ÙØØ§Ù Ø ÙÙ
ÙÙÙØ§ Ø§ÙØ¨Ø¯Ø¡ Ù٠اÙÙÙØ§Ø³ ÙØ¨Ù تشغÙÙÙØ§ ÙØ§ÙØ§ÙØªÙاء Ù
ÙÙØ§ بعد ذÙÙ. ÙÙÙÙ Ù
اذا ÙÙ ÙØ§Ù ÙÙØ§Ù خطأ Ø£Ø«ÙØ§Ø¡ استدعاء Ø§ÙØ¯Ø§ÙØ©Ø Ø¹ÙÙ ÙØ¬Ù Ø§ÙØ®ØµÙص Ø ÙØ¤Ø¯Ù تÙÙÙØ° fib(n) Ù٠اÙÙÙØ¯ Ø£Ø¯ÙØ§Ù Ø¥Ù٠إرجاع خطأ ÙÙØ£Ø±ÙاÙ
Ø§ÙØ³Ø§Ùبة Ø£Ù ØºÙØ± Ø§ÙØµØÙØØ©.
عبارة finally ÙÙ Ù
ÙØ§Ù عظÙÙ
ÙØ¥ÙÙØ§Ø¡ اÙÙÙØ§Ø³Ø§Øª Ù
ÙÙ
ا ÙØ§Ùت.
ÙÙØ§ finally ÙØ¶Ù
٠أ٠اÙÙÙØª Ø³ÙØªÙ
ÙÙØ§Ø³Ù بشÙ٠صØÙØ ÙÙ ÙÙØªØ§ Ø§ÙØØ§ÙØªÙÙ â ÙÙ ØØ§ÙØ© تÙÙÙØ° fib Ø¨ÙØ¬Ø§Ø ÙÙÙ ØØ§ÙØ© ØØ¯ÙØ« خطأ ÙÙÙ:
let num = +prompt("أدخ٠رÙÙ
صØÙØ Ù
ÙØ¬Ø¨Ø", 35)
let diff, result;
function fib(n) {
if (n < 0 || Math.trunc(n) != n) {
throw new Error("ÙØ¬Ø¨ Ø£ÙØ§ تÙÙÙ Ø³Ø§ÙØ¨Ø© Ø ÙÙØ°ÙÙ Ø¹Ø¯Ø¯ÙØ§ صØÙØÙا.");
}
return n <= 1 ? n : fib(n - 1) + fib(n - 2);
}
let start = Date.now();
try {
result = fib(num);
} catch (err) {
result = 0;
} finally {
diff = Date.now() - start;
}
alert(result || "ØØ¯Ø« خطأ");
alert( `${diff}ms Ù
دة Ø§ÙØ¥Ø´ØªØºØ§Ù` );
ÙÙ
ÙÙÙ Ø§ÙØªØÙ٠ع٠طرÙ٠تشغÙ٠اÙÙÙØ¯ بإدخا٠35 ÙÙ prompt â ÙØªÙ
تÙÙÙØ°Ù بشÙÙ Ø·Ø¨ÙØ¹Ù, finally بعد try. Ø«Ù
أدخ٠-1 â Ø³ÙÙÙÙ ÙÙØ§Ù خطأ ÙÙØ±Ù Ø ÙØ³ÙØ³ØªØºØ±Ù Ø§ÙØªÙÙÙØ° 0ms. تÙ
إجراء اÙÙÙØ§Ø³Ø§Øª بشÙ٠صØÙØ.
بÙ
عÙ٠آخر Ø ÙØ¯ ØªÙØªÙÙ Ø§ÙØ¯Ø§ÙØ© ب٠return Ø£Ù throw, ÙÙØ°Ø§ ÙØ§ ÙÙÙ
. تشتغ٠finally ÙÙ ÙÙØªØ§ Ø§ÙØØ§ÙØªÙÙ.
try...catch...finallyÙØ¨Ø®Ùا٠ذÙÙ Ø Ø¥Ø°Ø§ أعÙÙØ§ ع٠let ÙÙ try, ÙØ³Ù٠تÙÙÙ Ù
Ø±Ø¦ÙØ© ÙÙØ· داخÙÙØ§.
finally and returnThe finally clause works for any exit from try...catch. That includes an explicit return.
Ù٠اÙÙ
Ø«Ø§Ù Ø£Ø¯ÙØ§Ù Ø ÙÙØ§Ù return ÙÙ try. ÙÙ ÙØ°Ù Ø§ÙØØ§ÙØ© Ø ØªØ¹Ù
Ù finally ÙØ¨Ù Ø§ÙØ¹Ùدة Ø¥Ù٠اÙÙÙØ¯ Ø§ÙØ®Ø§Ø±Ø¬Ù Ù
باشرةÙ.
function func() {
try {
return 1;
} catch (err) {
/* ... */
} finally {
alert( 'finally' );
}
}
alert( func() ); // ÙØ¹Ù
Ù Ø§ÙØªÙبÙ٠أÙÙØ§Ù Ù
Ù finally Ø Ø«Ù
ÙØ°Ø§
````smart header="`try...finally`"
Ø¨ÙØ§Ø¡ `try...finally`Ø Ø¨Ø¯Ù٠شرط `catch`Ø Ù
ÙÙØ¯ Ø£ÙØ¶Ùا. ÙØ³ØªØ®Ø¯Ù
Ù Ø¹ÙØ¯Ù
ا ÙØ§ ÙØ±Ùد Ø§ÙØªØ¹Ø§Ù
Ù Ù
ع Ø§ÙØ£Ø®Ø·Ø§Ø¡ ÙÙØ§ (ÙØªØ±ÙÙØ§ ØªØ³ÙØ·)Ø ÙÙÙÙ ÙØ±Ùد Ø§ÙØªØ£Ùد Ù
Ù Ø£Ù Ø§ÙØ¹Ù
ÙÙØ§Øª Ø§ÙØªÙ Ø¨Ø¯Ø£ÙØ§Ùا ÙØ¯ Ø§ÙØªÙت.
```js
function func() {
// ابدأ ÙÙ ÙØ¹Ù Ø´ÙØ¡ ÙØØªØ§Ø¬ Ø¥Ù٠إÙÙ
ا٠(Ù
ث٠اÙÙÙØ§Ø³Ø§Øª)
try {
// ...
} finally {
// Ø£ÙÙ
Ù ÙØ°Ø§ Ø§ÙØ´ÙØ¡ ØØªÙ Ù٠تÙÙÙ ÙÙ Ø´ÙØ¡
}
}
```
Ù٠اÙÙÙØ¯ Ø£Ø¹ÙØ§Ù Ø ÙÙØ§Ù خطأ داخ٠`try` دائÙ
ÙØ§ Ù
ا ÙÙØ¹ Ø ÙØ£ÙÙ ÙØ§ ÙÙØ¬Ø¯ `catch`. ÙÙÙÙ `finally` ÙØ¹Ù
Ù ÙØ¨Ù Ø£Ù ÙØªØ±Ù Ø§ÙØªÙÙÙØ° Ø§ÙØ¯Ø§ÙØ©.
catch Ø´Ø§Ù ÙØ©
اÙ٠عÙÙ٠ات اÙÙØ§Ø±Ø¯Ø© ÙÙ ÙØ°Ø§ اÙÙØ³Ù ÙÙØ³Øª Ø¬Ø²Ø¡ÙØ§ Ù Ù Ø£Ø³Ø§Ø³ÙØ§Øª JavaScript.
ÙÙÙØªØ±Ø¶ Ø£Ù ÙØ¯ÙÙØ§ خطأ ÙØ§Ø¯Ø خارج Ø¨ÙØ§Ø¡ try...catchØ ÙØªØ¹Ø·Ù اÙÙØµ. Ù
ث٠خطأ ÙÙ Ø§ÙØ¨Ø±Ù
جة Ø£Ù Ø´ÙØ¡ Ù
Ø±ÙØ¹ آخر.
ÙÙ ÙÙØ§Ù طرÙÙØ© ÙÙØ±Ø¯ عÙÙ Ù Ø«Ù ÙØ°Ù Ø§ÙØÙØ§Ø¯Ø«Ø ÙØ¯ ÙØ±ØºØ¨ Ù٠تسجÙÙ Ø§ÙØ®Ø·Ø£ ÙØ¥Ø¸Ùار Ø´ÙØ¡ ÙÙ٠ستخد٠(Ø¹Ø§Ø¯Ø©Ù ÙØ§ ÙØ±Ù٠رسائ٠خطأ) Ø Ø¥ÙØ®.
ÙØ§ ÙÙØ¬Ø¯ Ø´ÙØ¡ Ù٠اÙÙ
ÙØ§ØµÙات Ø ÙÙÙÙ Ø§ÙØ¨Ùئات تÙÙØ±Ùا Ø¹Ø§Ø¯Ø©Ù Ø ÙØ£ÙÙØ§ Ù
ÙÙØ¯Ø© ØÙÙØ§. عÙ٠سبÙ٠اÙÙ
ثاÙ, Node.js ÙÙ process.on("uncaughtException") for that. And in the Ù
Ù Ø£Ø¬Ù ÙØ°Ø§. ÙÙ٠اÙÙ
ØªØµÙØ ÙÙ
ÙÙÙØ§ تعÙÙÙ Ø¯Ø§ÙØ© ÙÙØ¹Ø§Ù
Ù Ø§ÙØ®Ø§Øµ window.onerror,Ø§ÙØªÙ Ø³ÙØªÙ
تشغÙÙÙØ§ ÙÙ ØØ§ÙØ© ÙØ¬Ùد خطأ ØºÙØ± Ù
عÙÙÙ
.
Ø¨ÙØ§Ø¡ Ø§ÙØ¬Ù ÙØ©:
window.onerror = function (message, url, line, col, error) {
// ...
};
message- Ø±Ø³Ø§ÙØ© خطأ.
url- عÙÙØ§Ù URL ÙÙÙØµ Ø§ÙØ¨Ø±Ù ج٠ØÙØ« ØØ¯Ø« خطأ.
line,col- Ø£Ø±ÙØ§Ù Ø§ÙØ£Ø³Ø·Ø± ÙØ§Ùأع٠دة ØÙØ« ØØ¯Ø« Ø§ÙØ®Ø·Ø£.
error- ÙØ§Ø¦Ù خطأ.
عÙ٠سبÙ٠اÙ٠ثاÙ:
<script>
window.onerror = function(message, url, line, col, error) {
alert(`${message}\n At ${line}:${col} of ${url}`);
};
function readData() {
badFunc(); // عÙÙÙØ§ Ø ØØ¯Ø« خطأ Ù
ا!
}
readData();
</script>
Ø¯ÙØ± اÙÙ
Ø¹Ø§ÙØ¬ Ø§ÙØ´Ø§Ù
Ù window.onerror ادة ÙØ§ ÙÙÙ٠استرداد تÙÙÙØ° Ø§ÙØ¨Ø±ÙاÙ
ج اÙÙØµÙ â Ø±Ø¨Ù
ا ÙÙÙ٠ذÙÙ Ù
ستØÙÙÙØ§ ÙÙ ØØ§ÙØ© ÙØ¬Ùد أخطاء ÙÙ Ø§ÙØ¨Ø±Ù
جة Ø ÙÙÙÙ ÙØ¥Ø±Ø³Ø§Ù Ø±Ø³Ø§ÙØ© Ø§ÙØ®Ø·Ø£ Ø¥Ù٠اÙÙ
Ø·ÙØ±ÙÙ.
ÙÙØ§Ù Ø£ÙØ¶Ùا خد٠ات اÙÙÙØ¨ Ø§ÙØªÙ تÙÙØ± تسجÙÙ Ø§ÙØ£Ø®Ø·Ø§Ø¡ ÙÙ Ø«Ù ÙØ°Ù Ø§ÙØØ§ÙØ§Øª Ø Ù Ø«Ù https://errorception.com Ø£Ù http://www.muscula.com.
ÙØ¹Ù ÙÙ٠عÙÙ ÙØ°Ø§ اÙÙØÙ:
- ÙØ³Ø¬Ù ÙÙ Ø§ÙØ®Ø¯Ù Ø© ÙÙØØµÙ Ø¹Ù٠جزء JS (أ٠عÙÙØ§Ù URL ) Ù ÙÙØ§ ÙØ¥Ø¯Ø±Ø§Ø¬Ùا ÙÙ Ø§ÙØµÙØØ§Øª.
- ÙØØ¯Ø¯ ÙØ°Ø§ اÙÙØµ Ø§ÙØ¨Ø±Ù
ج٠ÙÙ JS Ø¯Ø§ÙØ©
window.onerror. - Ø¹ÙØ¯ ØØ¯ÙØ« خطأ Ø ÙØ±Ø³Ù Ø·ÙØ¨ Ø´Ø¨ÙØ© ØÙÙ٠إÙÙ Ø§ÙØ®Ø¯Ù Ø©.
- ÙÙ ÙÙÙØ§ تسجÙÙ Ø§ÙØ¯Ø®Ù٠إÙÙ ÙØ§Ø¬ÙØ© ÙÙØ¨ Ø§ÙØ®Ø¯Ù Ø© ÙÙØ±Ù Ø§ÙØ£Ø®Ø·Ø§Ø¡.
Ø§ÙØ®Ùاصة
تسÙ
Ø ÙÙÙÙØ© try...catch Ø¨Ø§ÙØªØ¹Ø§Ù
Ù Ù
ع أخطاء اÙÙÙØª Ø§ÙØªØ´ØºÙÙÙ. ÙÙ٠تسÙ
Ø ØØ±ÙÙÙØ§ Ø¨Ù âØªØ¬Ø±Ø¨Ø©â ØªØ´ØºÙ٠اÙÙÙØ¯ Ù âØ§ÙØªÙØ§Ø·â Ø§Ùأخطاء Ø§ÙØªÙ ÙØ¯ ØªØØ¯Ø« ÙÙÙ.
Ø§ÙØµÙغة ÙÙ:
try {
// run this code
} catch (err) {
// if an error happened, then jump here
// err is the error object
} finally {
// ØªÙØ¹Ù ÙÙ Ø£Ù ØØ§Ù بعد try/catch
}
ÙØ¯ ÙØ§ ÙÙÙÙ ÙÙØ§Ù جزء catch أ٠جزء finallyØ ÙØ°ÙÙ ÙØ¥Ù اÙÙÙØ§Ù٠اÙÙØµÙرة try...catch Ù try...finally ØµØ§ÙØØ© Ø£ÙØ¶Ùا.
ÙØ§Ø¦Ùات Ø§ÙØ®Ø·Ø£ ÙÙØ§ Ø§ÙØ®ØµØ§Ø¦Øµ Ø§ÙØªØ§ÙÙØ©:
messageâ Ø±Ø³Ø§ÙØ© خطأ ÙÙ ÙÙ ÙØ±Ø§Ø¡ØªÙا Ù ÙÙÙ ÙØ§.nameâ Ø§Ø³Ù Ø§ÙØ®Ø·Ø£ (اس٠٠ÙÙØ´Ø¦ Ø§ÙØ®Ø·Ø£).stack(ØºÙØ± ÙÙØ§Ø³Ù Ø ÙÙÙÙ٠٠دعÙÙ Ø¬ÙØ¯Ùا) â Ø§ÙÙ Ø¬Ù ÙØ¹Ø© ÙÙ ÙØØ¸Ø© Ø¥ÙØ´Ø§Ø¡ Ø§ÙØ®Ø·Ø£.
If an error object is not needed, we can omit it by using catch { instead of catch (err) {.
ÙÙ
ÙÙÙØ§ Ø£ÙØ¶Ùا Ø¥ÙØ´Ø§Ø¡ Ø§ÙØ£Ø®Ø·Ø§Ø¡ Ø§ÙØ®Ø§ØµØ© Ø¨ÙØ§ باستخداÙ
عاÙ
Ù throw. Ù
٠اÙÙØ§ØÙØ© Ø§ÙØªÙÙÙØ© Ø ÙÙ
Ù٠أ٠ÙÙÙÙ Ù
ØØªÙÙ throw Ù
تÙÙÙ Ù
Ù Ø£Ù Ø´ÙØ¡, ÙÙÙÙÙØ§ عادة Ù
ا تÙÙÙ ÙØ§Ø¦Ù خطأ ÙØ±Ø« Ù
Ù ÙØ¦Ø© Error. اÙÙ
Ø²ÙØ¯ Ø¹Ù ØªÙØ³Ùع Ø§ÙØ£Ø®Ø·Ø§Ø¡ Ù٠اÙÙØµÙ Ø§ÙØªØ§ÙÙ.
إعادة Ø§ÙØ±Ù
Ù ÙÙ ÙÙ
Ø· Ù
ÙÙ
Ø¬Ø¯ÙØ§ ÙÙ Ù
Ø¹Ø§ÙØ¬Ø© Ø§ÙØ£Ø®Ø·Ø§Ø¡: عادة Ù
ا تتÙÙØ¹ catch ÙØªØ¹Ø±Ù ÙÙÙÙØ© Ø§ÙØªØ¹Ø§Ù
Ù Ù
ع ÙÙØ¹ Ø§ÙØ®Ø·Ø£ اÙÙ
عÙÙ, ÙØ°ÙÙ ÙØ¬Ø¨ أ٠تÙÙÙ
بإعادة رÙ
Ù Ø§ÙØ£Ø®Ø·Ø§Ø¡ Ø§ÙØªÙ ÙØ§ تعرÙÙØ§.
ØØªÙ إذا ÙÙ
ÙÙÙ ÙØ¯ÙÙØ§ try...catchØ ÙØ¥Ù Ù
عظÙ
Ø§ÙØ¨Ùئات تسÙ
Ø ÙÙØ§ بإعداد Ù
Ø¹Ø§ÙØ¬ خطأ âØ¹Ø§Ù
â ÙÙÙØ¨Ø¶ عÙÙ Ø§ÙØ£Ø®Ø·Ø§Ø¡ Ø§ÙØªÙ ØªØØ¯Ø« بشÙ٠خارجÙ. Ù٠اÙÙ
ØªØµÙØØ ÙØ°Ø§ ÙØ¹Ù٠استخداÙ
window.onerror.
Ø§ÙØªØ¹ÙÙÙØ§Øª
<code>Ø ÙÙÙÙØ«Ùر Ù Ù Ø§ÙØ³Ø·Ùر استخدÙ<pre>Ø ÙÙØ£Ùثر Ù Ù 10 Ø³Ø·ÙØ± استخد٠(plnkr, JSBin, codepenâ¦)