JavaScript 錯誤處理|8月更文挑戰

錯誤類型

  1. SyntaxError 語法錯誤javascript

    • 變量名不規範
    • 關鍵字賦值
    • 基本語法錯誤
  2. ReferenceError 引用錯誤html

    • 變量或函數未被聲明
    • 給沒法被賦值的對象賦值
  3. RangeError 範圍錯誤java

    • 數組長度賦值爲負
    • 對象方法參數超出可行範圍
  4. TypeError 類型錯誤數組

    • 調用不存在的方法
    • 實例化一個非構造函數
  5. URIError URI 錯誤安全

    • decodeURI 參數不符合
  6. EvalError eval 函數執行錯誤markdown

處理錯誤

  1. try...catch函數

    try 塊中出錯,catch 塊中獲取錯誤信息ui

    try {
        console.log(a)
    } catch (e) {
        console.log(e)
        console.log(e.name)
        console.log(e.message)
    }
    複製代碼
  2. finallythis

    finally 包含必定要執行的語句spa

    try {
        console.log(a)
    } catch (e) {
        console.log(e)
    } finally {
        console.log('over')
    }
    複製代碼
  3. throw

    拋出一個能夠捕獲的錯誤,可指定錯誤信息和錯誤類型

    • throw new Error('一個錯誤被拋出')
    • throw '一個錯誤被拋出'
    try {
        throw '一個錯誤被拋出'
    } catch (e) {
        console.log(e)
    } finally {
        console.log('over')
    }
    複製代碼

ES5 嚴格模式

  1. ES3.0 存在如下問題

    • 語法嚴謹和合理性
    • 語法怪異行爲
    • 安全性效率
  2. 3.0 基礎上推出嚴格模式,IE9 及如下不支持嚴格模式

  3. 使用嚴格模式

    能夠全局使用嚴格模式,也能夠在單獨做用域中使用

    <script type="text/javascript"> 'use strict' function test() {  'use strict' } var test = (function () {  'use strict' })() </script>
    複製代碼
  4. 嚴格模式不能使用 with 方法,語法錯誤

    with 方法用於改變做用域

    var obj = {
        a : 1
    }
    function test() {
        var a = 2
        with (obj) {
            console.log(a)
        }
    }
    test()
    複製代碼
  5. 嚴格模式下不能使用 arguments 的callee 和 caller 屬性,類型錯誤

  6. 嚴格模式下,不容許不聲明直接賦值

    // 嚴格模式下報引用錯誤
    a = 1 
    var b = c = 2
    複製代碼
  7. 嚴格模式下函數內部 this 爲 undefined

    function test() {
        console.log(this)
    }
    test() // undefined
    var t = new test() // {}
    test.call(1) // 1
    複製代碼
  8. 嚴格模式下不容許函數參數重複,報語法錯誤

  9. 嚴格模式拒絕使用重複的對象屬性名,但不報錯

  10. 嚴格模式下 eval 函數問題

    eval('var a = 1')
    console.log(a) 
    // 非嚴格模式下,a 掛在 window 上,打印出 1,
    // 嚴格模式下,eval 有本身的做用域,在 window 下打印 a 報引用錯誤
    複製代碼
相關文章
相關標籤/搜索