try…catch
try...catch里面的代码出错 不影响 外部代码的后续执行
try{
//代码块
//try里面第n行出错,则第n行往后都不会被执行
}catch(e){//error error.message error.name -->error
//console.log(e.message + " : " + e.name) //ReferenceError : b is not defined
//如果try里面的代码发生错误,则在catch里报错,不发生错误catch不执行
}finally{}
Erroy.name的六种值对应的信息:
- EvalError: eval()的使用与定义不一致
- RangeError: 数值越界
- ReferenceError: 非法或不能识别的引用值
- SyntaxError: 发生语法解析错误
- TypeError: 操作数类型错误
- URIError: URI处理函数使用不当
es5严格模式
- “use strict” – es5.0严格模式的启动
-
不在兼容es3的一些不规则语法。使全新的es5规范。
-
两种用法 :
(1) 全局严格模式
(2) 局部函数内严格模式(推荐) -
就是一行字符,不会对不兼容严格模式的浏览器产生影响。
-
不支持with,arguments,callee,func,caller,变量赋值前必须声明,局部this必须被赋值(Person.call(null/undefined)赋值什么就是什么),拒绝重复属性和参数
with: 改变作用域链,将作用域链的最顶端变成括号中的对象
var obj = {
name : 'obj';
}
var name = 'window';
function test(){
var name = 'scope';
with(obj){
console.log(name);//obj
}
}
test();
为了防止污染全局变量,通常
var org = {
dp1: {
jc: {
//变量
}
},
dp2: {
}
}
with(org.dp1.jc){
}
document中有很多函数,为了简化写法通常
with(document){
write();
}
disadvantage : 更改作用域链需要消耗大量效率,所以es5不支持with写法
function test(){
console.log(this);
}
test();//undefined
new test();//test()
新增eval,功能强大