@[try.catch es5标准模式](try.catch es5标准模式)
一、try.catch
在try里面的发生错误,不会执行错误后语句后try里面的所有代码,但是不影响后续代码。错误信息会传到catch的e,供catch使用。无错误的话 ,不会跳到catch里面,依次执行try。
try {
console.log('a');
console.log(b);
console.log('c');//不会执行
}catch(e){
console.log(e.name +":"+e.message);
}
console.log('d');
//a
// ReferenceError: b is not defined
//d
二、Error.name的六种值对应的信息
1.EvalError: eval()的使用与定义不一致
eval只支持系统调用,自己不能使用,否则会报错
2.RangError:数值越界
RangeError对象标明一个错误,当一个值不在其所允许的范围或者集合中。
不常见
3.ReferenceError:非法或不能识别的引用数值
console.log(b)
//ReferenceError: b is not defined,为定义就使用
b()
//ReferenceError: b is not defined,为声明就使用
4.SyntaError:发生语句解析错误
//(低级错误)
function demo(){ ;}
//函数内放的是中文逗号,预编译时期就会报错
//Uncaught SyntaxError: Invalid or unexpected token
5.TypeError:操作数类型错误
TypeError(类型错误) 对象用来表示值的类型非预期类型时发生的错误。
6.URIError:URI处理函数使用不当
URIError 对象用来表示以一种错误的方式使用全局URI处理函数而产生的错误。
详细文档:[URIError](https://cloud.tencent.com/developer/section/1191736)
es5严格模式
1.浏览器是基于es3.0的+es5.0的新增方法使用的
2.es5.0严格模式,那么es3.0和es5.0产生冲突的部分就是用的es5.0
否则使用es3.0
全局模式:写在逻辑的最前面,即下面的代码都遵循es5.0的规则,
局部模式:写在函数内,作用于局部。
"use strict";//启动es5.0严格标准模式,全局模式
function test(){
console.log(argument.callee);
}
test();
//5.0模式下,会报错。3.0不会
//上面还有代码,作用于局部,推荐使用局部的。
function test(){
"use strict";//启动es5.0严格标准模式,局部模式
console.log(argument.callee);
}
test();
3.变量赋值前必须声明,局部this必须被赋值,不再指向window(Person.call(null/undefined)赋值什么就是什么;拒绝重复属性和参数但是不报错。
es5.0模式下不能使用的一些方法
1.with语句 扩展一个语句的作用域链
(过于强大,es5里面不能使用)。
var obj={
name:"obj";
}
var name ='window';
function test(){
var name='scope';
with(obj){
console.log(name);
}
}
test();
//obj
//先找obj,再text,再window
配合命名空间的使用
var org={
dp1:{
jc:name:'abc',
age:123;
},
deng:{
name:"xiaodeng",
age:234
},
dp2:{
}
}
with(org,dp1,jc){
console,log(name);//abc
}
with(org.dp1.deng){
console.log(name);//xiaodeng
}