你知道JavaScript這六種錯誤類型嗎?

前言

今日話題,瞭解JavaScript的錯誤處理機制。bash

1、ReferenceError

引用一個不存在的變量時發生的錯誤。將一個值分配給沒法分配的對象,好比對函數的運行結果或者函數賦值。函數

舉栗子ui

try {
          console.log(a) // a 未聲明的變量
        } catch (e) {
            if (e instanceof ReferenceError) {
                console.log(e.name + ": " + e.message); // ReferenceError: a is not defined 
            } 
        }
複製代碼

構建一個ReferenceErrorspa

try {
          throw new ReferenceError('Hello', 'someFile.js', 10);
        } catch (e) {
         console.log(e instanceof ReferenceError); // true
         console.log(e.message);                   // "Hello"
         console.log(e.name);                      // "ReferenceError"
         console.log(e.fileName);                  // "someFile.js"
         console.log(e.lineNumber);                // 10
         console.log(e.columnNumber);              // 0
         console.log(e.stack);                     // "@Scratchpad/2:2:9\n"
        }
複製代碼
若是未聲明變量就使用,就會拋出這個異常哦!
複製代碼

2、TypeError

變量或參數不是預期類型時發生的錯誤。好比使用new字符串、布爾值等原始類型和調用對象不存在的方法就會拋出這種錯誤,由於new命令的參數應該是一個構造函數。3d

舉栗子code

try {
          var a = {}
          a.go()
        } catch (e) {
            if (e instanceof TypeError) {
                console.log(e.name + ": " + e.message); // TypeError: a.go is not a function
            } 
        }
複製代碼

3、EvalError

在ES5如下的JavaScript中,當eval()函數沒有被正確執行時,會拋出evalError錯誤。orm

舉栗子cdn

var myEval = eval;
 myEval("alert('call eval')");
 
複製代碼
ES5以上的JavaScript中已經再也不拋出該錯誤,但依然能夠經過new關鍵字來自定義該類型的錯誤提示。
複製代碼

4、RangeError

數值變量或參數超出其有效範圍對象

舉栗子blog

try {
         [].length = -1
        } catch (e) {
            if (e instanceof RangeError) {
                console.log(e.name + ": " + e.message); // RangeError: Invalid array length
            } 
        }
複製代碼

5、SyntaxError

語法錯誤,好比變量名不規範

舉栗子

try {
          var 1 
        } catch (e) {
            if (e instanceof SyntaxError) {
                console.log(e.name + ": " + e.message); // SyntaxError: Unexpected number
            } 
        }
複製代碼

6、URIError

給 encodeURI()或 decodeURl()傳遞的參數無效

舉栗子

捕獲一個URIError

try {
  decodeURIComponent('%');
} catch (e) {
  console.log(e instanceof URIError); // true
  console.log(e.message);             // "malformed URI sequence"
  console.log(e.name);                // "URIError"
  console.log(e.fileName);            // "Scratchpad/1"
  console.log(e.lineNumber);          // 2
  console.log(e.columnNumber);        // 2
  console.log(e.stack);               // "@Scratchpad/2:2:3\n"
}
複製代碼

建立URIError實例

try {
  throw new URIError('Hello', 'someFile.js', 10);
} catch (e) {
  console.log(e instanceof URIError); // true
  console.log(e.message);             // "Hello"
  console.log(e.name);                // "URIError"
  console.log(e.fileName);            // "someFile.js"
  console.log(e.lineNumber);          // 10
  console.log(e.columnNumber);        // 0
  console.log(e.stack);               // "@Scratchpad/2:2:9\n"
}
複製代碼

兼容性

相關文章
相關標籤/搜索