19.try{}catch{}和es5.0严格模式

2018-02-27  本文已影响0人  Sune小叶子

1.try{}catch{}

try里面的代码有错的时候不会抛出一个错误,只是try里面错误行的后面的代码都不执行,但是try,catch外面的后续的代码会继续执行.如果try里面没有错误就不会执行catch里面的程序,一旦有错误就会执行catch里面的程序.

try{

    console.log("a");

    console.log(b);

    console.log("c");

}catch(e){

    //error对象就是错误信息,包括error.message  error.name等,就是这里的形参e

    console.log(error.name + " " +error.message);

}

console.log("d");

2.Error.name错误的名称和信息,共6种

1.EvalError:eval()的使用与定义不一致

2.RangError:数值越界

3.ReferenceError:非法或不能识别的引用数据类型

4.SyntaxError:发生语法解析错误

5.TypeError:操作数类型错误

6.URLError:URL处理函数使用不当

3.ES5的严格模式

基于es3.0 + es5.0的新增方法来使用,注意是新增;那么这两者产生冲突的部分还是使用es3.0的,但是如果采用es5.0的严格模式,那么产生冲突的部分就是用的es5.0的部分

"use strict"  //es5.0严格模式的启动方式,写在页面最顶端,前面不允许有其它代码,如果是全局,就是全局的严格模式,如果是function里面就是局部的严格模式(推荐使用局部的)

字符串启动,不会对不兼容的浏览器产生影响

不允许使用arguments.callee,func.caller

不允许使用with,with(obj){}会把obj作为它作用域链的最顶端,即变成作用域链上面的最近的那个AO,但是with消耗性能,所以es5.0 不允许使用

变量赋值前必须声明

局部this必须被赋值,赋予什么就是什么,就是说函数预编译的时候不在指向window

function Test(){

    console.log(this)

}

Test() -->undefined而不是window

new Test() -->this指向函数构造器construct -->Test{}

Test.call({}) -->this指向object{}

Test.call(123) --> this -->123,但是如果是es3.0里面会被指向包装类

es3.0里面重复的形参和属性名不会报错,但是es5.0里面不允许使用,会报错

eval可以把字符串当代码来执行

var a = 123;

eval("console.log(a)") -->直接将字符串当做代码执行,打印为123,但是通用规定es3.0和es5.0都不允许使用,因为他会改变作用域


var obj = {

    name:"obj"

}

var name = "window";

function test(){

    var name = "scope";

    with(obj){

        console.log(name);

    }

}

test() -->"obj"

上一篇 下一篇

猜你喜欢

热点阅读