美文网首页
19.try{}catch{}和es5.0严格模式

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

作者: Sune小叶子 | 来源:发表于2018-02-27 00:02 被阅读0次

    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"

    相关文章

      网友评论

          本文标题:19.try{}catch{}和es5.0严格模式

          本文链接:https://www.haomeiwen.com/subject/lxbuxftx.html