JS中的異常處理方法分享

來源:互聯網
上載者:User

JS中的異常處理方法分享

我們在編寫js過程中,難免會遇到一些代碼錯誤問題,需要找出來,有些時候怕因為js問題導致使用者體驗差,這裡給出一些解決方案

js容錯語句,就是js出錯也不提示錯誤(防止瀏覽器右下角有個黃色的三角符號,要不使用者體驗不好)

 

 代碼如下:

window.onerror=function(){return true;} 

 

 

 

下面是為了擷取js異常資訊,方便開發人員找回問題

 

1,try...catch...

 

代碼如下:

<script type="text/javascript">

var txt=""

function message()

{

try

   {

   adddlert("Welcome guest!")

   }

catch(err)

   {

     txt="本頁中存在錯誤。nn"

     txt+="點擊“確定”繼續查看本頁,n"

     txt+="點擊“取消”返回首頁。nn"

     if(!confirm(txt))

         {

         document.location.href="/index.html"

         }

   }

}

</script>

 

 

2 ,throw

 

 代碼如下:

<script type="text/javascript">

var x=prompt("請輸入 0 至 10 之間的數:","")

try

{

if(x>10)

  throw "Err1"

else if(x<0)

  throw "Err2"

else if(isNaN(x))

  throw "Err3"

}

catch(er)

{

if(er=="Err1")

  alert("錯誤!該值太大!")

if(er == "Err2")

  alert("錯誤!該值太小!")

if(er == "Err3")

  alert("錯誤!該值不是數字!")

}

</script>

 

 

3,onerror:

 

代碼如下:

<script type="text/javascript">

onerror=handleErr

var txt=""

 

function handleErr(msg,url,l)

{

txt="本頁中存在錯誤。nn"

txt+="錯誤:" + msg + "n"

txt+="URL: " + url + "n"

txt+="行:" + l + "nn"

txt+="點擊“確定”繼續。nn"

alert(txt)

return true

}

 

function message()

{

adddlert("Welcome guest!")

}

</script>

 

 

 

js中的異常處理 

 

在JavaScript可以使用try...catch來進行異常處理。例如:   

 

try { foo.bar();} catch (e) { alert(e.name + ": " + e.message);} 

目前我們可能得到的系統異常主要包含以下6種: 

 

EvalError: raised when an error occurs executing code in eval()  

RangeError: raised when a numeric variable or parameter is outside of its valid range  

ReferenceError: raised when de-referencing an invalid reference  

SyntaxError: raised when a syntax error occurs while parsing code in eval()  

TypeError: raised when a variable or parameter is not a valid type  

URIError: raised when encodeURI() or decodeURI() are passed invalid parameters  

上面的六種異常對象都繼承自Error對象。他們都支援以下兩種構造方法: 

 

new Error();new Error("異常資訊"); 

手工拋出異常的方法如下:

 

代碼如下:

try { 

throw new Error("Whoops!");}

catch (e) { 

alert(e.name + ": " + e.message);} 

 

 

如要判斷異常資訊的類型,可在catch中進行判斷:

 

 

 

 代碼如下:

try {

foo.bar();

} catch (e) { 

if (e instanceof EvalError) {  

alert(e.name + ":" + e.message); 

}  else if (e instanceof RangeError) {

alert(e.name + ": " + e.message); }  

// etc 

 

 

Error具有下面一些主要屬性: 

 

description: 錯誤描述 (僅IE可用).  

fileName: 出錯的檔案名稱 (僅Mozilla可用).  

lineNumber: 出錯的行數 (僅Mozilla可用).  

message: 錯誤資訊 (在IE下同description)  

name: 錯誤類型.  

number: 錯誤碼 (僅IE可用).  

stack: 像Java中的Stack Trace一樣的錯誤堆棧資訊 (僅Mozilla可用).  

因此為了更好的瞭解錯誤資訊我們可以將catch部分改為如下形式:   

 

 

 代碼如下:

try {

    foo.bar();

} catch(e) {

    if (browserType != BROWSER_IE) {

        alert("name: " + e.name + "message: " + e.message + "lineNumber: " + e.lineNumber + "fileName: " + e.fileName + "stack: " + e.stack);

    } else {

        alert("name: " + e.name + "errorNumber: " + (e.number & 0xFFFF) + "message: " + e.message ");         } } "

 

 

JavaScript中的throw命令事實上可以拋出任何對象,並且我們可以在catch接受到此對象。例如: 

 

 

 代碼如下:

try {

    throw new Date(); // 拋出目前時間對象 } catch (e) { alert(e.toLocaleString()); // 使用本地格式顯示目前時間

    }

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.