7、try和catch错误解决和throw错误抛出

本文详细介绍了JavaScript中使用try、catch、finally进行错误处理的方法,并演示了如何通过throw语句自定义错误,以及在实际场景中如何应用错误处理来提升用户体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、try和catch错误

<!DOCTYPE html>
<html lang="cn">
<head>
	<meta charset="UTF-8">
	<title>瓜娃子</title>

</head>
<body>
	<script>
		function abc() {
			console.log(123);
		}
		//try 代码块中,可能存在错误
		try{
			cba();
		}catch(e){
			//当try代码块中存在错误,则运行catch中的内容
			//TODO handle the exception
			console.log([e]);
			console.log(e.message);
			console.log(e.stack);
		}finally {
			//可写可不写
			//不管是否有错,都会运行这里面的代码
			console.log('不管是否有错, 都会运行这里面的代码');
		}
		console.log('cba函数后的内容');
	</script>
</body>
</html>

2、throw自定义错误

<!DOCTYPE html>
<html lang="cn">
<head>
	<meta charset="UTF-8">
	<title>瓜娃子</title>

</head>
<body>
	<script>
		console.log('正常运行的代码');
		try {
			
			//throw主动抛出错误
			throw'这是中间抛出的错误';
			
		} catch (e) {
			console.log('这里执行处理错误');
		}
		console.log('这是错误后面的代码');
	
	</script>
</body>
</html>

3、错误简单应用

<!DOCTYPE html>
<html lang="cn">
<head>
	<meta charset="UTF-8">
	<title>瓜娃子</title>
</head>
<body>
	<input type="text" id="phone">
	<button>拨打电话</button>
	<script>
		var inputDom = document.querySelector('#phone');
		var btn = document.querySelector('button');
		btn.onclick = function () {
			var phoneNumStr = inputDom.value;
			var phoneNum = parseInt(phoneNumStr);
			console.error('这里是信息错误提示,不会中断代码');
			try {
				if (isNaN(phoneNum)) {
					var error = new Error('这个电话号码格式有问题,这是电话号码的错误');
					error.type = 'geShi_problem';
					throw error;
				} else if (phoneNumStr.length != 11) {
					var error = new Error('电话号码长度有问题,因该是11位');
					error.type = 'numLength_problem';
					throw error;
				}
			} catch (e) {
				console.log(e);
				if (e.type == 'numLength_problem') {
					var h1 = document.createElement('h1');
					h1.innerHTML = '请正确输入11位的号码';
					document.body.appendChild(h1);
				} else {
					var h1 = document.createElement('h1');
					h1.innerHTML = '请确保输入的号码是数字';
					document.body.appendChild(h1);
				}
			}
			
			console.log('执行拨打电话');
		};
	
	
	</script>
</body>
</html>
### Try-Catch-Finally 中抛出处理错误的最佳实践 #### 正确使用 `Try` 块 在 `try` 块中放置可能引发异常的代码。这通常涉及文件操作、网络请求或其他可能导致运行时错误的操作。 ```csharp try { // 可能会抛出 DivideByZeroException 的代码 int result = 10 / divisor; } ``` #### 使用特定类型的 `Catch` 处理不同异常 针对不同的异常类型提供具体的捕获逻辑,而不是简单地捕捉所有异常。这样可以更精确地应对各种情况并采取适当措施[^1]。 ```csharp catch (DivideByZeroException ex) { Console.WriteLine("除数不能为零"); } // 对于其他未知异常也可以有通用处理 catch (Exception ex) { Console.WriteLine($"发生了未预期的异常: {ex.Message}"); } ``` #### 利用 `Finally` 进行资源清理 无论是否发生异常,`finally` 都会被执行,因此适合用于释放资源或恢复环境状态。即使程序遇到严重错误无法继续执行下去,`finally` 中定义的动作也会尽可能完成[^3]。 ```csharp finally { // 清理工作,比如关闭打开的文件流或者数据库连接 if (fileStream != null && fileStream.IsOpen()) { fileStream.Close(); } } ``` #### 手动抛出异常 通过 `throw` 关键字可以在必要时候主动触发自定义异常,以便更好地传达应用程序内部的状态变化给上层调用方[^2]。 ```csharp if (someConditionIsInvalid) { throw new InvalidOperationException("条件无效!"); } ``` #### 最佳实践总结 - **具体化异常**: 尽量避免使用泛型 Exception 类来捕获所有的异常;而是应该根据实际情况选择最恰当的具体异常类型。 - **不要忽略异常**: 即使是在日志记录之后也不要轻易吞下异常而不做进一步处理。 - **保持简洁清晰**: 不要在一个 try-catch 结构里塞入过多复杂的业务逻辑,使得难以追踪问题所在。 - **合理利用 finally**: 确保重要的收尾动作总是能够得到执行,特别是涉及到外部资源管理的时候。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值