# try catch

try catch

错误捕捉 调试用。

在try里面的发生错误,不会执行错误后的try里面的代码,ad

如果try里面的代码不出错,执行完try代码再catch里面的代码,abcd

如果try里面的代码报错,会将错误传递到catch里面的e,=b.name+b.message

        try {
            console.log('a');
            console.log(b);
            console.log('c');
        } catch (e) {
            console.log(e.name + " : "e.message);
        }
        console.log('d');
//第二行会报错 但是代码写在try里面。
//执行a 不执行b 也不执行c  但是d会执行
1
2
3
4
5
6
7
8
9
10

执行顺序

执行顺序是先打印a然后b报错,不看b和b后面的信息。把报错信息传到catch里面的e。打印b的名字和b返回的错误(not defined) 最后执行try catch外部的d

# 常见的报错

(1)EvalError:eval()的使用与定义不一致 解释:这个 eval 是不允许我们用的,如果用了的话他就会显示这个错误信息。

(2)RangeError:数值越界 解释:这个很少见,以后遇到了会讲的。

(3)ReferenceError:非法或不能识别的引用数值 解释:当一个变量未经声明就使用或者当一个函数未经声明就调用就会显示这个。

(4)SyntaxtError:发生语法解析错误 解释:代码在执行前系统先通篇扫描一遍,如果有低级语法错误就显示这个,例如写 了一个中文,少写一个括号等等。

(5)TypeError:类型操作错误 解释:比如说用数组方法操作对象了就会显示这个,后边遇到了再说。

(6)URIError:URI 处理函数使用不当 解释:引用地址发生错误,后面遇到再说。

# ES5标准模式

不再兼容es3的一些不规则语法,使用全新的es5规范.

es3.0和es5.0产生冲突的部分用es3.0 es5.0严格模式,那么es3.0和es5.0产生冲突的部分就是用es5.0

基于es3.0和es5.0的新增方法,要使用ES5来解决。

# 严格模式

如果想要启动es5.0严格模式, 那么在页面的顶端写上字符串"use strict"可以写到函数的顶端,function(){"use strict";},此函数遵循es5语法,推荐使用局部

es5不可以用width方法,不可以用arguments.callee方法,不可以使用function.caller

变量赋值前必须得赋值.(没有了暗示全局变量),不能出现重复的属性和参数,局部必须被赋值,Person.call(null/undefined 赋值什么就是什么(this))

# with

width 可以让里面的代码的作用域链最顶端变成width括号里面的值也就是代码体最顶端的AO

# with用法

简化代码.命名空间里面讲过

with(org.dp1.jc) {
        console.log(name);
}
1
2
3
with(document) {
        write('a');
}
1
2
3
var obj = {
        name : "obj"
    }
    var name = 'window';
    function test() {
        var name = 'scope';
        with(obj) {
            console.log(name);
        }
    }
//如果给with里面加参数,
//会把with里面的参数当做次函数代码块里面作用域链的最顶端。
//也就是说现在访问name输出的是obj
1
2
3
4
5
6
7
8
9
10
11
12
13
    with(document) {
        write('a');
    }
1
2
3

严格模式下预编译环节this不再指向window,指向空

# eval

es3不好使,es5可以用 能把括号里面的字符串当做代码来执行

var a = 123;
eval('console.log(a)');
1
2