ECMAScript - 错误类型、try/catch、throw抛出错误

错误类型

一、分类

语句是否执行:

1.语法错误:不会执行
所有语句都不会执行 ,直接报错SyntaxError(如用的中文符号;)
2.通用错误:中断执行
错误语句之前的语句会执行,之后的不会执行

ECMA-262规范:

1.语法错误 SyntaxError

• 变量名不规范 -> var 1 = 1;
• 关键字被赋值 -> function = 5;
• 在function以外使用return语句;
• 其他语法错误 -> var a = 7:

2.引用错误 ReferenceError

• 变量或函数未被声明 -> test();
• 给无法赋值的对象赋值 -> var a = 1 = 2;

3.范围错误 RangeError

RangeError 错误会在数值越界时抛出。
• 数组长度赋值为负数 -> var arr = [1, 2, 3]; arr.length = -1;
• 对象方法参数超出可行范围 -> var num = new Number(66.66); console.log(num.toFixed(-1));

4.类型错误 TypeError

• 调用不可能存在的方法 -> 123();
• 调用对象中不存在的方法 ->obj = {}; obj.run(); //注意,如果写obj.run 不会报错,会返回undefined
• 实例化原始值 -> var a = new ‘string’; //new后面必须接constructor

5.URI错误 URIError

• URIError,只会在使用 encodeURI()或 decodeURI()但传入了格式错误的URI 时发生。
• 区分URI/URL/URN:
1.URI:Uniform Resource Identifier 统一资源标识符
2.URL:Uniform Resource Locator 统一资源定位符
3.URN:Uniform Resource Name 统一资源名称(URL和URN都是URI的子集)
var str = decodeURI(’%hfsljf%’); -> Uncaught URIError

6.eval函数执行错误 EvalError

【eval函数作用:计算 JavaScript 字符串,并把它作为脚本代码来执行】
基本上,只要不把 eval()当成函数调用就会报告该错误:
new eval(); // 抛出 EvalError,但Firefox 和 IE 抛出的是 TypeError
eval = foo; // 抛出 EvalError

二、实例化错误

以上6种错误都对应着构造函数,可以手动实例化对象,构造函数都只接收一个参数 -> 错误消息message。

var error = new SyntaxError('犯了语法错误');
typeof(error);// object
error.name// SyntaxError
error.message// 犯了语法错误

try/catch

try{ }catch(error){ }finally{ }
1、try中放入可能出错的代码,如果 try 块中有代码发生错误,代码会立即退出执行,并跳到 catch 块中。 catch 块此时接收到一个对象error,该对象包含发生错误的相关信息。
2、catch语句中可使用 instanceof 关键字(如 error instanceof TypeError)对不同的错误类型进行处理
3、try 或catch 块都无法阻止 finally 块执行,包括 return 语句。

function test(){
	try{
	  console.log('正常执行1');//正常执行1
	  console.log(a); //语法错误,执行catch代码块的语句
	  console.log('正常执行2');//这行及以后的代码都不会执行
	  return 0;  
	}catch(e){ 
	    console.log(e.name + ':' + e.message);//ReferenceError:a is not defined
	    return 1;
	}finally{
	    console.log('正常执行3');//正常执行3  finally里的语句一定会执行
	}
	console.log('正常执行4');//正常执行4  try_catch代码块以外的语句会正常执行
}
test();

throw抛出错误

1、throw 操作符,用于在任何时候抛出自定义错误e, e的数据类型不限。
2、throw也可以抛出系统内置错误的实例化对象 -> 例如 throw new TypeError(“类型错误”);

var val = window.prompt('请输入一个数');
try {
  if(typeof(val)=='number'){
	throw true;
  }else if(val == ""){
	throw "is Empty";
  }else if(isNaN(val)){
	throw "is not a number";
  }
}catch(e){
    console.log(val + " " + e);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值