JS错误信息 & ea5.0 严格模式:

try…catch

try{
    console.log("b");
    console.log(b);  //发现错误直接中断
    console.log("c");
}catch(e){  //error是一个对象,只有两项信息 (error.message error.name)
    console.log(e.name+":"+e.message);
}
console.log("d");  //try 里面出错对它外面的代码没有影响

我们来看一下结果:
这里写图片描述
在 try 里面的东西发生错误,不会执行错误后面的 try 里面的代码,会将错误对象传到 e 中(只有两个信息 error.message 和 error.name)


错误信息:

Error.name的六种值对应信息:

1)TypeError:操作数类型错误
2)ReferenceError:非法或不能识别的引用数值
3)SyntaxErrror:发生语法解析错误
4)EvalError:eval()的使用与定义不一致
5)RangeError:数值越界
6)URIError:URI处理函数使用不当(地址发生错误)

举一些例子吧:

                        //例1
console.log(a);  //ReferenceError:非法或不能识别的引用数值

//var str=abcd;
                 //变量未经声明就使用,函数未经声明就调用

这里写图片描述

                        //例2
console.log("hellow world"); //注意 后面的分号为中文字符

//function b(){
//  ;//中文字符 尽管这个函数只是声明并没有执行,依然会报错
//}

这里写图片描述


ea5.0 严格模式:

es5.0 严格模式下,es3.0 和 es5.0 产生冲突的部分就使用 es5.0 否则就会使用 es3.0

es5.0 严格模式的启动:”use strict”;
写在整个启用块(可以是页面也可以是函数)的最顶端(逻辑顶端 可以有多余的空格,不可以有代码)

  • es5.0 严格模式下不可使用的:

1)argumrnts.callee

2)argumrnts.caller

3)with(){}
with 中包含一个对象时, 他会将对象这段代码放在作用域链的最顶端 (可以改变作用域链)虽然with 很强大,但它更改了作用域链,很可能会使系统的效率变低!!

var obj={
    name:"obj",
}
var name="window";

 function text(){
    var name="text";
    with(obj){
        console.log(name);  //结果:obj
    }
 }
 text();
  • 变量赋值前必须声明

  • 局部的this必须被赋值(Person.call (null / undefinde)赋值什么就是什么 )

function text(){
    console.log(this);  // undefinde (this不再指向window)
}
new text();

//console.log(this)    //这个this 还是window
  • 拒绝重复属性和参数

eval 可以将字符串当最一段代码来运行(ea3.0 中都不可以使用 eval(); 改变作用于的功能更强大!!)

var a="hello world";
eval('console.log(a)');   //结果:hello world

猜你喜欢

转载自blog.csdn.net/qq_41853863/article/details/81298021