دستورات try و catch

در این درس می خواهیم دستورات try…catch و نحوه استفاده از آنها برای رفع خطاهای برنامه، را به شما آموزش دهیم. به کد زیر توجه کتید:

<script>

    number

</script>

اگر برنامه بالا را اجرا کنید با خطای ReferenceError: number is not defined مواجه می شوید. چون برنامه نمی داند با کلمه number چگونه رفتار کند. ما یک کلمه به نام number نوشته ایم و نه ذکر کرده ایم که این یک متغیر است و نه مقداری به آن اختصاص داده ایم. اینجاست که ما با یک استثناء مواجه می شویم و باید آن را مدیریت کنیم. می‌توان خطا را با استفاده از دستور try…catch اداره کرد. بدین صورت که کدی را که احتمال می‌دهید ایجاد خطا کند را در داخل بلوک try قرار می‌دهید. بلوک catch هم شامل کدهایی است که وقتی اجرا می‌شوند که برنامه با خطا مواجه شود. تعریف ساده‌ی این دو بلوک به این صورت است که بلوک try سعی می‌کند که دستورات را اجرا کند و اگر در بین دستورات خطایی وجود داشته باشد برنامه دستورات مربوط به بخش catch را اجرا می‌کند. برنامه زیر نحوه استفاده از دستور try…catch را نمایش می‌دهد :

try 
{
    number;
} 
catch
{
    console.log("This word is not defined");
}
This word is not defined

از آنجاییکه در برنامه بالا خطایی به وجود آمده است کدهای داخل بلوک catch اجرا می‌شوند. بنابراین :

try 
{
    number;
    console.log("This line will not be executed.");
} 
catch
{
    console.log("This word is not defined");
}

می‌توانید از یک نوع استثناء مخصوص به یک خطا در داخل بلوک catch استفاده کنید، مثلاً برای خطای بالا می توان از یکی از کلاس های خطا در جاوااسکریپت به نام err به شکل زیر استفاده کنید :

try 
{
    number;
} 
catch(err)
{
    console.log(err.name);
}
ReferenceError

خاصیت name مربوط به کلاس err نوع خطا را مشخص می کند. همچنین می‌توانید اطلاعات مربوط به این استثناء را با استفاده از خاصیت message نمایش دهید:

try 
{
    number;
} 
catch(err)
{
    console.log(err.message);
}
number is not defined

شما می‌توانید از عمگر instanceof نیز به صورت زیر استفاده نمایید:

try
{
    eval("a ++ b");
}
catch(err)
{
    if (err instanceof ReferenceError)
    {
        console.log("value is not defined");
    }
    if (err instanceof TypeError)
    {
        console.log("Format cannot be accepted!");
    }
    if (err instanceof SyntaxError)
    {
        console.log("Causes SyntaxError");
    }
}
Causes SyntaxError

بلوک catch از کلاس err برای به دام انداختن همه استثناءهایی که به وسیله برنامه به وجود می‌آید استفاده می‌کند. در داخل بلوک catch می‌توانید با استفاده از یک دستور if و کلمه کلیدی instanceof نوع استثناء به وجود آمده را بیابید.