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 报引用错误
    复制代码
相关文章
相关标签/搜索