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"
网友评论