147 lines
3.0 KiB
Markdown
147 lines
3.0 KiB
Markdown
|
---
|
|||
|
title: Error Handling and Try Catch Throw
|
|||
|
localeTitle: خطأ في التعامل ومحاولة رمي الصيد
|
|||
|
---
|
|||
|
## خطأ في التعامل ومحاولة رمي الصيد
|
|||
|
|
|||
|
يمثل `try...catch..finally` statement عبارة عن مجموعة من العبارات للتجربة ، ويحدد استجابة ، في حالة طرح استثناء. في `try` يحتوي على عبارة واحدة أو أكثر من البيانات، واحد على الأقل `catch` بند أو `finally` فقرة، أو كليهما.
|
|||
|
|
|||
|
#### `try...catch`
|
|||
|
|
|||
|
`try {
|
|||
|
throw new Error('my error');
|
|||
|
}
|
|||
|
catch (e) {
|
|||
|
console.error(e.message);
|
|||
|
}
|
|||
|
|
|||
|
// Output:
|
|||
|
// my error
|
|||
|
`
|
|||
|
|
|||
|
#### `try...finally` :
|
|||
|
|
|||
|
`try {
|
|||
|
throw new Error('my error');
|
|||
|
}
|
|||
|
finally {
|
|||
|
console.error('finally');
|
|||
|
}
|
|||
|
|
|||
|
// Output:
|
|||
|
// finally
|
|||
|
`
|
|||
|
|
|||
|
_ملاحظة:_ عندما لا `catch` الخطأ ، فإنه في الواقع لا "يصطاد" ، حتى لو تم تنفيذ الحظر `finally` . وهذا يعني أن الخطأ سيستمر في كتلة `try` العليا (أو الكتلة الرئيسية).
|
|||
|
|
|||
|
#### `try...catch...finally` :
|
|||
|
|
|||
|
`try {
|
|||
|
throw new Error('my error');
|
|||
|
}
|
|||
|
catch (e) {
|
|||
|
console.error(e.message);
|
|||
|
}
|
|||
|
finally {
|
|||
|
console.error('finally');
|
|||
|
}
|
|||
|
|
|||
|
// Output:
|
|||
|
// my error
|
|||
|
// finally
|
|||
|
`
|
|||
|
|
|||
|
الاستخدام النموذجي:
|
|||
|
|
|||
|
`try {
|
|||
|
openFile(file);
|
|||
|
readFile(file)
|
|||
|
}
|
|||
|
catch (e) {
|
|||
|
console.error(e.message);
|
|||
|
}
|
|||
|
finally {
|
|||
|
closeFile(file);
|
|||
|
}
|
|||
|
`
|
|||
|
|
|||
|
#### `try...catch` متداخلة `try...catch`
|
|||
|
|
|||
|
بامكانك ايضا:
|
|||
|
|
|||
|
* اعتبر عبارة `try-catch` داخل كتلة `try` .
|
|||
|
* رمي الخطأ صعودا.
|
|||
|
|
|||
|
`try {
|
|||
|
try {
|
|||
|
throw new Error('my error');
|
|||
|
}
|
|||
|
catch (e) {
|
|||
|
console.error('inner', e.message);
|
|||
|
throw e;
|
|||
|
}
|
|||
|
finally {
|
|||
|
console.log('finally');
|
|||
|
}
|
|||
|
}
|
|||
|
catch (e) {
|
|||
|
console.error('outer', e.message);
|
|||
|
}
|
|||
|
|
|||
|
// Output:
|
|||
|
// inner my error
|
|||
|
// finally
|
|||
|
// outer my error
|
|||
|
`
|
|||
|
|
|||
|
#### أنواع الخطأ
|
|||
|
|
|||
|
##### خطأ مرجعي
|
|||
|
|
|||
|
`var x;
|
|||
|
try {
|
|||
|
x = y + 1; // y cannot be referenced (used)
|
|||
|
}
|
|||
|
catch(err) {
|
|||
|
console.log(err.name, err.message);
|
|||
|
}
|
|||
|
// ReferenceError y is not defined
|
|||
|
`
|
|||
|
|
|||
|
##### خطأ في بناء الجملة
|
|||
|
|
|||
|
`try {
|
|||
|
eval("alert('Hello)"); // Missing ' will produce an error
|
|||
|
}
|
|||
|
catch(err) {
|
|||
|
console.log(err.name,err.message);
|
|||
|
}
|
|||
|
// SyntaxError Invalid or unexpected token
|
|||
|
`
|
|||
|
|
|||
|
##### خطأ مطبعي
|
|||
|
|
|||
|
`var num = 1;
|
|||
|
try {
|
|||
|
num.toUpperCase(); // You cannot convert a number to upper case
|
|||
|
}
|
|||
|
catch(err) {
|
|||
|
console.log(err.name, err.message);
|
|||
|
}
|
|||
|
// TypeError num.toUpperCase is not a function
|
|||
|
`
|
|||
|
|
|||
|
##### خطأ URI
|
|||
|
|
|||
|
`try {
|
|||
|
decodeURI("%%%"); // You cannot URI decode these percent signs
|
|||
|
}
|
|||
|
catch(err) {
|
|||
|
console.log(err.name, err.message);
|
|||
|
}
|
|||
|
// URIError URI malformed
|
|||
|
`
|
|||
|
|
|||
|
#### معلومات اكثر:
|
|||
|
|
|||
|
[MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/try…catch) [W3S](https://www.w3schools.com/js/js_errors.asp)
|