0

0

js try ... catch语法结构有什么用?try ... catch详解

青灯夜游

青灯夜游

发布时间:2018-11-08 18:01:23

|

8055人浏览过

|

来源于php中文网

原创

本篇文章给大家带来的内容是js try ... catch语法结构有什么用?try ... catch详解。有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助。

一、try ... catch的基本语法

try..catch构造主要有两个块:try{}和catch(err){}:

try{
   //在这里运行代码
   //抛出错误
}
catch(err){
   //在这里处理错误
}

工作原理如下:

1、首先,执行代码try {...}。

2、如果没有错误,则忽略catch(err){....},执行完try {...}后就跳过catch(err){....},直接执行下一条语句。

3、如果发生错误,则try停止执行,开始执行catch(err){...}。err变量(可以自己任意定义)包含一个错误对象,详细说明了所发生的事情。

二、错误对象

发生错误时,JavaScript会生成一个包含有关它的详细信息的对象。然后将该对象作为参数传递给catch,例:

try {
  // ...
} catch(err) { // <-- "错误对象",“err”可以用可以用任意词代替
  // ...
}

对于所有内置错误,catch块内的错误对象有两个主要属性:

name

错误名称,对于一个未定义的变量来“引用错误”。

message

有关错误详细信息的文本消息。

大多数环境中还有其他非标准属性。最广泛使用和支持的一个是:

stack

当前调用堆栈:一个字符串,其中包含导致错误的嵌套调用序列的信息(目的是用于调试的)。

例如:

try {
  lalala; // 错误,变量未定义!
} catch(err) {
  alert(err.name); // 引用错误
  alert(err.message); // Lalala变量没有定义
  alert(err.stack); //引用错误:Lalala变量没有定义在…
  
  // 也可以作为整体显示错误
  // “name: message”:可以将错误转换为字符串
  alert(err); // ReferenceError: lalala is not defined
}

三、使用“try ... catch”

让我们来探索一个真实的用例try..catch。

html代码:

<p>请输出一个 5 到 10 之间的数字:</p><div class="aritcle_card flexRow">
                                                        <div class="artcardd flexRow">
                                                                <a class="aritcle_card_img" href="/ai/2495" title="Atoms.dev"><img
                                                                                src="https://img.php.cn/upload/ai_manual/001/246/273/176853356760573.png" alt="Atoms.dev"  onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
                                                                <div class="aritcle_card_info flexColumn">
                                                                        <a href="/ai/2495" title="Atoms.dev">Atoms.dev</a>
                                                                        <p>AI创业智能体平台,通过多智能体系统实现业务自主构建与运营。</p>
                                                                </div>
                                                                <a href="/ai/2495" title="Atoms.dev" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
                                                        </div>
                                                </div>
<input id="demo" type="text">
<button type="button" onclick="myFunction()">测试输入</button>
<p id="mess"></p>

js代码:

function myFunction() {
	try {
		var x = document.getElementById("demo").value;
		//取元素的值

		if(x == "") throw "值为空";
		//根据获取的值, 抛出错误
		if(isNaN(x)) throw "不是数字";
		if(x > 10) throw "太大";
		if(x < 5) throw "太小";
	} catch(err) {
		var y = document.getElementById("mess");
		//抓住上面throw抛出的错误, 给p标签显示
		y.innerHTML = "错误:" + err + "。";
	}
}

运行后的效果图:

2.jpg3.jpg

四、try…catch…finally

try…catch构造还有一个代码子句:finally。

如果它存在,它会在所有情况下运行:

1、在try之后,如果没有错误,

2、在catch之后,如果有错误

扩展语法如下所示:

try {
   ... 尝试执行代码 ...
} catch(e) {
   ... 处理错误 ...
} finally {
   ... 始终执行 ...
}

尝试运行此代码:

try {
  alert( 'try' );
  if (confirm('犯错误了?')) BAD_CODE();
} catch (e) {
  alert( 'catch' );
} finally {
  alert( 'finally' );
}

代码有两种执行方式:

如果你对“犯错误了?”,回答“是(确定)”,那么执行try -> catch -> finally。

如果你说“不(取消)”,那么try -> finally。

finally表明当我们在try..catch之前开始做某事,并且想要在任何结果的情况下完成它时,就需要使用该子句。

例如,我们想要测量Fibonacci数函数所花费的时间fib(n)。当然,我们可以在运行之前开始测量并在之后完成测量。但是如果在函数调用期间出现错误怎么办?特别是,fib(n)下面的代码中的实现返回负数或非整数的错误。

finally无论如何,该条款都是完成测量的好地方。

这里finally保证在两种情况下都能正确测量时间 - 如果成功执行fib并且出现错误:

let num = +prompt("输入正整数?", 35)

let diff, result;

function fib(n) {
	if(n < 0 || Math.trunc(n) != n) {
		throw new Error("不能是负的,且必须是整数。");
	}
	return n <= 1 ? n : fib(n - 1) + fib(n - 2);
}

let start = Date.now();

try {
	result = fib(num);
} catch(e) {
	result = 0;
} finally {
	diff = Date.now() - start;
}

alert(result || "发生错误");

alert(`执行时间 ${diff}ms`);

当我们输入35时:

1.jpg2.jpg3.jpg

当我们输入-1时:

5.jpg6.jpg7.jpg

两次测量均正确完成。

总结:以上就是本篇文章的全部内容,希望能对大家的学习有所帮助,相关视频教程推荐:JavaScript教程

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

759

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

220

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1564

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

649

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

1208

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

1184

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

191

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

111

2025.08.07

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

4

2026.03.10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 5.9万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.4万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号