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