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) |