1、SyntaxError语法错误
    (1)变量名不规范
    var 1 = 1 // => unexpected number
    var 1ab = 1 // => invalid or unexpected token 无效或者意外的标记
    (2)关键字不可赋值
    new = 1 // => unexpeted token
    (3)基本语法错误
    var num = 5: // => unexpected token :
    2、Reference Error 引用错误
    (1)引用未定义的变量 test() // => reference error test is not defined
    (2)给无法赋值的变量赋值 1 = 2 // => invalid left-hand side in assignment
    3,、RangeError 范围错误
    (1)数组长度赋值为负数
    var arr = [];
    arr.legnth = -1 // => invalid array length
    (2)对象方法参数,超出范围
    var num = 23.56
    num.toFixed(-1) // => digits argument must be between 0 and 100
    4、TypeError
    (1)引用不存在的方法
    var a = {}
    a.test() // => typeerror a.test is not a function
    (2)实例化原始值的时候,new后面没有跟构造函数
    var num = new ‘Number’ // => ‘Number’ is not a constructor
    5、UrlError
    URI > URL + RUN
    URI : uniform resource identifier 统一资源标志符
    URL: uniform resource location 统一资源定位符 网上资源唯一的地址
    URN: uniform resource name 统一资源名称 网上资源的名称

    var myUrl = ‘www.baidu.com?search=学习资源’
    console.log(encodeURI(myUrl))
    var myUrl = ‘%qerqr%’
    console.log(decodeURI(myUrl)) // => UrlError malformed

    6、EvalError,eval使用时报错
    执行eval时不用引号扩住参数,现在不会报错了
    eval作用:将字符串转化成js代码执行。可用于将后台的json字符串转化为js对象(现在有JSON.parse)
    eval的弊端:语法规范不好,有被恶意利用的危险,执行更慢(调用js执行器),调试不便。
    以上六点都有相关内置构造函数
    7、try-catch
    一般情况下浏览器报错了,程序立马停止执行。这时可以用到try-catch,用来捕获可能的错误,并进行下一步处理,避免程序的终止。

    1. let json = '';
    2. try{
    3. if(json === ''){
    4. throw('json为空')
    5. //放在try里面手动抛出错误信息,将抛出的异常传递给下面第一个catch块
    6. }
    7. JSON.parse(json)
    8. }catch(e){
    9. console.log(e.name + ':' + e.message)
    10. }finally{
    11. //无论有没有捕获到错误,都会执行和放在外部作用一样
    12. }

    8、ECMA历史
    97 - 1.0
    98 - 2.0
    99 - 3.0 (javascript的通行标准)
    07 - 4.0草案,设计很激进,不受浏览器厂商待见,只有mozzila支持
    08 - 4.0草案中止。在3.0基础上,加上容易改善的部分形成3.1-ECMAScript-5.0。剩下激进的部分被称作harmony。
    09 - 5.0发布。harmony中一部分不是特别激进的部分被称作js.next(es6部分) ,另一部分被称为js.next.next(后来被作为es7部分)
    11 - 5.1作为ISO国际标准发布
    15 es6 = js.next正式发布, ECMAScript2015

    9、严格模式
    es5中有正常模式,严格模式
    ie9及以下版本不支持严格模式
    3.0有不足和一些怪异行为,es5对效率有很高要求,为了对以后发展作铺垫,加上了严格模式。有些3.0的代码在正常模式下正常执行,在严格模式下会报错。
    ‘use strict’, 不支持的浏览器遇见字符串表达式不会报错。
    一般推荐在函数内部使用严格模式。
    严格模式下
    (1)不允许使用with函数改变作用域链,消耗性能,直接在参数对象上查找属性和方法),会报错。
    (2)caller-callee不可用,会报错,arguments可用。
    (3)直接给未声明的变量赋值,会直接报错。
    var a = b = 1
    (4) this不会默认指向window,未赋值,就是undefined
    (5)函数参数名不能重名,会报错。
    (6)对象属性名重复,不会报错取后面的值

    1. 'use strict'
    2. let obj ={
    3. a:1,
    4. a:2
    5. }
    6. console.log(obj.a) // => 2

    (7)eval在严格模式下,有自己的作用域。直接在外面访问变量会报错。