‎‎خطاهاي جاوااسكريپتJavaScript Errors -‎

Previous >    <Next  

‎Throw , and Try ... Catch ... Finally‎

‎‎پرتاب كن، وسعي كن... بگير ... در انتهايا نهايت

‎دستور‎try{ }‎ يك بلوك كد كه ميخواهيد اجرا و كنترل نمائيد، تعريف ‎ميكند.

‎دستور‎catch{}‎براي گرفتن خطا ازبلوك try تعريف ميگردد .يعني اگر ‎خطائي در آن رخ دهد دراين بلوك آن خطا مديريت ميشود.

‎دربلوك كد‎finally{ }‎دستوراتي تعريف ميشود، كه بدون توجه نتيجه خطا ‎اجرا ميگردد.

‎‎throw{ }‎‎بلوك كديست كه يك خطايابي سفارشي را معرفي ميكند .

‎‎خطاها اتفاق مي افتدErros Will Happen -‎

‎‎هنگاميكه يك جاوااسكريپت كد اجرا ميشود، خطاهاي مختلفي ممكن است اتفاق بافتد:

‎مثال ـ در مثال عمدا براي نمونه دستور‎alert()‎‎ به اشتباه‎adddlert()‎‎ ‎نوشته شده است.

<p id="demo"></p>

<script>
try {
  adddlert("Welcome guest!");
}
catch(err) {
  document.getElementById("demo").innerHTML = err.message;
}
</script >

--(go to editor for change code and run)

‎جاوااسكريپت‎adddlert()‎‎ برايش ناشناخته بوده وبراي آن خطا ايجاد ميكند .اين خطا در ‎بلوك كدcatch مديريت ميشود . شئ‎err‎ براي خطاي ايجاد شده وmessage ويژگي آن است. ‎مقدار اين ويژگي شرح خطاي ايجاديست.

‎try‎و catch جاوااسكريپت

‎دستور‎try{ } ‎ اجازه ميدهد كه بلوك كدهائيكه ميخواهيد هنگام ‎اجرا آزمايش خطائي شوند، بنويسيد.

‎دستور‎catch{ }‎اجازه ميده كه بلوك كدي را بنويسد كه هنگام خطا در ‎بلوكtry اجرا گردد وخطا را مديريت كند .

‎دستورات‎try‎ و ‎catch‎ بعنوان يك زوج دستوري بفرم كلي زير ‎استفاده ميشوند

try {
  Block of code to try
}
catch(err) {
  Block of code to handle errors
}

‎‎خطاهاي پرتابي جاوااسكريپتJavaScript Throws Errors -‎

‎هنگاميكه در اجرا خطائي پيش مي آيد، جاوااسكريپت بطول معمول اجرا را متوقف نموده و پيغام خطا ‎را ايجاد ميكند .اصطلاح فني آن اينست كه جاوااسكريپت يك استثنا‎(exception)‎ ايجاد ‎وخطائي را پرتاب‎(throw an error)‎ ميكند.

‎جاوااسكريپت در واقع با برخورد با خطا شئي‎(err)‎ ايجاد ميكند .اين شئ داراي دو ‎ويژگيname و message ميباشد .

‎‎دستورthrow جاوااسكريپت

‎با اين دستور‎throw‎ميتوان يك خطا يابي سفارشي ايجاد كرد .از بعد ‎فني ميتوان يك استثنا ايجاد كرد.

‎‎استثناي ايجادي ميتواند يكي از موارد‎String , Number , Boolean or Object‎ باشد:

throw "Too big";    // throw a text
throw 500;          // throw a number

‎اگر‎throw‎ را با‎try , catch‎ استفاده نمائيد، ميتوانيد مسير اجرا ‎كنترل نموده ويك مديريت خطاي سفارشي ايجاد كنيد.

‎‎اعتبار سنجي وروديInput Validation -‎

‎مثال ـ در اين مثال اگر ورودي مقدار اشتباهي داشته باشديك استثنا ايجاد‎(err)‎ ‎وپرتاب‎(throw)‎ ميشود .استثنا بوسيله دستورcatch گرفته و خطاي اتفاق افتاده نمايش ‎داده ميشود.

<!DOCTYPE html>
<html>
<body>

<p Please input a number between 5 and 10:</p>

<input id="demo" type="text">
<button type="button" onclick="myFunction()">Test Input
<p id="p01"></p>

<script>
function myFunction() {
  const message = document.getElementById("p01");
  message.innerHTML = "";
  let x = document.getElementById("demo").value;
  try {
    if(x.trim() == "") throw "empty";
    if(isNaN(x)) throw "not a number";
    x = Number(x);
    if(x < 5) throw "too low";
    if(x > 10) throw "too high";
  }
  catch(err) {
    message.innerHTML = "Input is " + err;
  }
}
</script >

</body>
</html>

--(go to editor for change code and run)

‎‎اعتبار سنجي اچ تي ام اليHTML Validation -‎

‎كد بالا يك مثال است .مرورگرهاي مدرن اغلب از تركيب جاوااسكريپت وتوابع اعتبار سنجي داخلي HTML‎با استفاده از روالها تعريف شده روي ويژگي آنان استفاده ميكنند .

<input id="demo" type="number" min="5" max="10" step="1">

‎ميتوانيد براي اطلاعات بيشتري در مورد اعتبارسنجي فرم ها به فصل هاي بعدي مراجعه كنيد .همچنين ‎اين موضوع در بخشهاي مربوط بهHTML آمده است.

‎‎دستورfinally جاوااسكريپت

<>‎

‎دستور‎finally‎ اجازه ميدهد كدهائي را بعد از try و catch بدون توجه به نتيجه ‎آنها اجرا نمائيد .فرمت كلي آن مطابق زيراست:

try {
  Block of code to try
}
catch(err) {
  Block of code to handle errors
}
finally {
  Block of code to be executed regardless of the try / catch result
}

‎‎مثال ـ دستورfinally

function myFunction() {
  const message = document.getElementById("p01");
  message.innerHTML = "";
  let x = document.getElementById("demo").value;
  try {
    if(x.trim() == "") throw "is empty";
    if(isNaN(x)) throw "is not a number";
    x = Number(x);
    if(x > 10) throw "is too high";
    if(x < 5) throw "is too low";
  }
  catch(err) {
    message.innerHTML = "Error: " + err + ".";
  }
  finally {
    document.getElementById("demo").value = "";
  }
}

--(go to editor for change code and run)

‎‎شئ خطاي‎(err)‎ جاوااسكريپت

‎جاوااسكريپت براي برخورد با خطا داراي شئ داخلي بنامerr ميباشد .اين شئ داراي دو ويژگي name ‎وmessage براي نگهداري اطلاعات خطا است.

‎‎ويژگي هاي شئerr

‎‎ويژگي ‎‎شــرح
‎name‎ ‎‎نام خطا را تنظيم يا برگشت ميدهد.
‎message‎ ‎‎ييغام خطا را تنظيم يا برگشت ميدهد‎(string)‎ .

‎‎مقادير ويژگيname شئ err

‎error name‎ ‎‎شــرح
‎EvalError‎ ‎‎خطاي ايجادي در تابع‎eval( )
‎RangError‎ ‎‎هنگاميكه يك عدد خارج از محدوه ميشود.
‎ReferenceError‎ ‎‎يك مراجعه غير قابل قبول اتفاق بافتد
‎SyntaxError‎ ‎‎يك خطاي دستوري ياSyntax اتفاق بافتد
‎TypeError‎ ‎‎يك خطاي نوع‎(type)‎ اتفاق بافتد .
‎URIError‎ ‎‎خطائي در تابع‎encodeURI( )‎ اتفاق بافتد.

‎‎اين شش مقدار ويژگيname بدنبال تشريح ميشود .

‎‎خطايEval Error

‎‎EvalError‎‎خطائيكه در تابع ‎eval()‎‎ اتفاق مي افتد مشخص ميكند .

‎‎هر گز نسخه هاي جاوااسكريپتEvalError پرتاب نميكنند، بجايش SyntaxError ميباشد.

‎‎خطايRange Error

‎‎RangeError‎‎هنگامي اتفاق مي افتد كه مقدار در محدوده غير قابل قبول باشد .

‎‎براي مثال نمي توانيد تعداد ارقام مهم عددي را روي500 رقم تنظيم كنيد.

‎‎مثال ـ تنظيم غير قابل قبول ارقام عدد.

let num = 1;
try {
  num.toPrecision(500);   // A number cannot have 500 significant digits
}
catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}

--(go to editor for change code and run)

‎‎خطاي ارجاعReference Error -‎

ReferenceError ‎‎هنگامي پرتاب ميشود كه از متغير تعريف نشده استفاده نمائيد . اين ‎براي ارجاع به هر مورد ناشناخته مثل متغير، تابع و ...ميافتد.

‎‎مثال ـReferenceError

let x = 5;
try {
  x = y + 1;   // y cannot be used (referenced)
}
catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}

--(go to editor for change code and run)

‎‎خطايSyntaxError

SyntaxError‎‎هنگامي اتفاق مي افتد كه يك كد با فرمت نادرست ارزيابي شود .يا ‎بعبارتي دستور از نظر قوانين دستوري اشتباه باشد.

‎‎مثال ـ خطايSyntaxError

try {
  eval("alert('Hello)");   // Missing ' will produce an error
}
catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}

--(go to editor for change code and run)

‎‎خطايTypeError

‎‎TypeError‎‎هنگامي اتفاق مي افتد كه عملي نا متناسب روي نوع داده انجام ميگيرد .

‎مثال ـ استفاده متد‎toUpperCase()‎‎ براي اعداد، كه غير قابل قبول است .اين متد ‎مربوط به رشته هاست.

let num = 1;
try {
  num.toUpperCase();   // You cannot convert a number to upper case
}
catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}

--(go to editor for change code and run)

‎‎خطايURI (Uniform Resource Identifier) Error

URIError ‎‎هنگامي رخ ميدهد كه در توابعURI از كراكترهاي غير قابل قبول استفاده

‎شود

‎‎مثال ـ استفاده كراكتر‎%‎ در رشته آرگومان تابع ‎decodeURI( )

try {
  decodeURI("%%%");   // You cannot URI decode percent signs
}
catch(err) {
  document.getElementById("demo").innerHTML = err.name;
}

--(go to editor for change code and run)


Previous >    <Next