//try里面的错误,不会执行错误后的try里面的代码
try{
console.log('a');
console.log(b);//b报错 c也不会执行
console.log('c');
}catch(e){ // error --> error.message error.name
alert{e.name + " : " + e.message);
//error (ReferenceError : b is not defined)
}
console.log('d');
Error.name的六种值对应的信息:
1.EvalError:eval()的使用与定义不一致
2.RangeError:数值越界
3.ReferenceError:非法或不能识别的引用数值
4.SyntaxError:发生语法解析错误
5.TypeError:操作数类型错误
6.URIError: URI处理函数使用不当
es5严格模式
- "use strict "
不在兼容es5的一些不规则语法。使用全新的es5规范。
两种用法:
1.全局严格模式
2.局部函数内严格模式(推荐)
就是一行字符串,不会对不兼容严格模式的浏览器产生影响。
不支持with,arguments.callee,func.caller,变量赋值前必须声明,局部this必须被赋值(Person.call(null/underfined))赋值什么就是什么,拒绝重复属性和参数
//基于的es3.0的 + es5.0的新增方法 使用的
//es3.0严格模式 那么es3.0和es5.0产生冲突的部
//分就是用es5.0 否则会使用es3.0
"use strict";//es5.0严格模式 逻辑最顶端加上这
//句话 或者写在函数里的逻辑最顶端 实现局部效果
function test() {
console.log(arguments.callee);
}
test();报错
var obj = {
name : "obj"
}
var name = 'window';
function test () {
var name = 'scope';
with(obj) {
console.log(name);
}
}
test();->obj
with可以让里面的代码作用域链的最顶端变成括号
里面的对象,obj当成了第一个作用域链的ao,但
是在es5.0里是报错的
"use strict";
function Test () {
console.log(this);
}
Test(); -->underfined
function Test () {
console.log(this);
}
new Test(); --> Test{}
function Test () {
console.log(this);
}
Test.call({}); -->Object{}
function test(name, name){
console.log(name);
}
test(1, 2); 报错
var a = 123;
eval('console.log(a)');
eval 能把字符串当代码用 所以123打印出来了
//es3.0都不能eval();eval是魔鬼
网友评论