JS错误信息类型
1、SyntaxError 语法错误
变量名不规范
var 1 = 1;
关键字赋值
new = 7;//报错
基本语法错误
var f = 0;
2、ReferenceeError 引用错误
变量或者函数未被声明
给无法被赋值的对象赋值的时候
var a = 1 = 2;
3、RangeError 范围错误
数组长度赋值为负数
var arr = [1,2,3];
arr.length = -1;
console.log(arr);
对象方法参数超出可行范围
var num = new Number(66.66);
console.log(num.toEixed(-1));
4、 TypeError 类型错误
调用不存在的方法
123();
var obj = {};
obj.say();
实列化原始值 实例化的是构造函数
var a = new 'string';// TypeError
5、URIError URI错误
URI: UNIFORM RESOURCE INDENTIFIRE 统一资源标识符
URL: UNIFORM RESOIRCE LOCATOR 统一资源定位符
URN: UNIFORM RESOURCE NAME 统一资源名称
encodeURI中文转化成中文字符编码
decodeURI中文字符编码转化成中文
var url = 'http://www.baidu.com?name = '张三'';
var newUrl = encodeURI(url);
var str = decodeURI('%fd5df%');//不符合常规的URI无法解析
6、EvalError eval函数执行错误 eval() 代码写成字符串 放到eval里面就能执行
var jsonData = '[' +
'{' +
'"name":"zadd"'
+ '},' +
'{' +
'"age":"xdd"'
+ '},'+
'{' +
'"fg":"dddd"'
+ '}'
+ ']';
console.log(jsonData);
var data = eval('(' + jsonData + ')');
console.log(data);//转成了可遍历对象
手动抛出错误 try catch finally throw
JSON字符串JSON对象里面是不能有方法的
var jsonStr = '';
try{
if(jsonStr == ''){
throw 'JSON字符串为空';
}
console.log('正常执行1');
console.log(a);
console.log('正常执行2');
} catch(e){
console.log(e,e.name,e.message)
}finally{
console.log('正常执行3');
}
前面六种错误类型都分别对应了六个不同的构造函数,可以自定义Error
new Error();
new RangeError();
ES5严格模 式
ECMAScript JavaScript 的语法规范、方法规范
IE9及以下,不支持严格模式
严格模式下,变量必须要声明 也不能写a = b= 1
//一般不在全局写'use strict'
function test(){
'use strict';
}
with();
with 可以改变作用域, 严格模式下报错
var a = 1;
var obj = {
a: 2
}
//
function test(){
var a = 3;
with(test){
console.log(a);//3
}
with(obj){
console.log(a);//2
}
with(window){
console.log(a);//1
}
}
test();
//严格模式下函数内部的this是不指向window的 打印时undefined
'use strict'
function test(){
console.log(this);
}
test();
函数的参数不能重复,对象属性名也不能重复
'use strict'
function test(a, a){
console.log(a);
}
test(1,2);
var obj = {
a: 1,
a: 2,
a: 3
}
var a = 1;
var obj = {
a: 2,
}
function test(){
var a = 3;
//with可以改变作用域 严格模式下不能使用,会报错
with(test){
console.log(a)//3
}
}
test();
严格模式下eval是有自己的作用域的
'use strict'
eval('var a = 1;console.log(a)');
console.log(a);//严格模式下会报错
callee caller严格模式下不能用