【编程向导】JavaScript-基础语法-语句和声明一期讲解

文章目录

  • while 语句
    • 语法
      • 参数
    • 示例
      • 代码示例
  • try-catch 语句
    • catch
    • finally
    • 嵌套捕获
    • 异常标识符
  • throw 语句
    • 语法
      • 参数
    • 示例
      • 代码示例
      • 抛出一个对象

while 语句

while 语句可以在某个条件表达式为真的前提下,循环执行指定的一段代码,直到那个表达式不为 true 时结束循环。

语法

while (expression) statement;

参数

参数描述
expression条件表达式,在每次循环前被求值。如果求值为 truestatement就会被执行。如果求值为 false,则跳出 while 循环执行后面的语句。
statement只要条件表达式求值为 true,该语句就会一直被执行。要在循环中执行多条语句,可以使用块语句({ ... })包住多条语句。

注意:使用 break 语句在 expression 计算结果为真之前停止循环。

示例

代码示例

var i = 0;
while (i < 10) {i += 2;
}
var cars = ['BMW', 'Volvo', 'Saab', 'Ford'];
var text = '';
var i = 0;
while (i < cars.length) {text += cars[i] + '<br>';i++;
}

try-catch 语句

try...catch 语句将能引发错误的代码放在 try 块中,并且对应一个响应,然后有异常被抛出。

try...catch 语句包含了由一个或者多个语句组成的 try 块, 和至少一个 catch 子句或者一个 finally 子句的其中一个,或者两个兼有。

下面是三种形式的 try 声明:

  • try...catch
  • try...finally
  • try...catch...finally

catch

catch 子句包含 try 块中抛出异常时要执行的语句。也就是,你想让try 语句中的执行操作成功,如果没成功,你想控制接下来发生的事情,这时你可以在 catch 语句中实现。

如果有在 try 块中有任何一个语句(或者从 try 块中调用的函数)抛出异常,控制立即转向 catch 子句。如果在 try 块中没有异常抛出,会跳过 catch 子句。

🌰 示例:

try {console.log('1: start');throw 'this is a error';console.log('2: end');
} catch (err) {console.log('3:', err);
}// 输出顺序:
// 1:start
// 3:this is a error

catch 块指定一个标识符(在上面的示例中为 err),该标识符保存由 throw 语句指定的值。catch 块是唯一的,因为当输入catch 块时,JavaScript 会创建此标识符,并将其添加到当前作用域;标识符仅在 catch 块执行时存在;catch 块执行完成后,标识符不再可用。

从结果可以得知,如果在 try 块中任何一个语句(或者从 try 块中调用的和你熟)抛出异常,控制立即转向 catch 子句。

finally

finally 子句在 try 块和 catch 块之后执行但是在下一个 try 声明之前执行。

⚠️ 注意: 无论是否有异常抛出或着是否被捕获它总是执行。

function fn() {try {return 1;} catch (err) {return 2;} finally {console.log(3);}
}console.log(fn());
// 输出顺序:
// 3
// 1

从结果来看,先执行 finally 再执行 try 里面 return 的值。

function fn() {try {throw 'this is a error'} catch (err) {console.log(1, err)return 2} finnally {console.log(3)}
}console.log(fn())
// 输出顺序:
// 1 this is a error
// 3
// 2

先执行 return 之前的语句,再执行 finnally,最后返回 return 的值。

⚠️ 注意: 如果从 finally 块中返回一个值,那么这个值将会成为整个 try-catch-finally 的返回值,无论是否有 return 语句在 trycatch 中。这包括在 catch 块里抛出的异常。

嵌套捕获

你可以嵌套一个或者更多的try语句。如果内部的try语句没有catch子句,那么将会进入包裹它的try语句的catch子句。

try {try {throw 'this is a error';} finally {console.log(1);}
} catch (err) {console.log(2, err);
}// 输出顺序:
// 1
// 2 this is a error

try 块中嵌套 try-catch-finnally 语句。

try {try {throw 'this is a error';} catch (err) {console.error(1, err);throw err;} finally {console.log(2);return 3;}
} catch (err) {console.error(4, err.message);
}// 输出顺序:
// 1 this is a error
// 2

因为 finally 块里的 return 语句,外部的 this is a error 异常没有抛出。从 catch 块返回的值同样适用。

异常标识符

try 块中的抛出一个异常时, exception_var(如 catch (err) 中的 err )用来保存被抛出声明指定的值。你可以用这个标识符来获取关于被抛出异常的信息。

这个标识符是 catch 子语句内部的。换言之,当进入 catch 子语句时标识符创建,catch 子语句执行完毕后,这个标识符将不再可用。

throw 语句

throw语句 用来抛出一个用户自定义的异常。当前函数的执行将被停止( throw 之后的语句将不会执行),并且控制将被传递到调用堆栈中的第一个catch块。如果调用者函数中没有catch块,程序将会终止。

语法

throw expression;

参数

参数说明
expression要抛出得表达式

示例

代码示例

你可以抛出任意表达式而不是特定一种类型的表达式。

throw 'Error2'; // String type
throw 42; // Number type
throw true; // Boolean type
throw {toString: function () {return "I'm an object";},
};

抛出一个对象

你可以在抛出异常时指定一个对象。然后可以在 catch 块中引用对象的属性。以下示例创建一个类型为 UserException 的对象,并在 throw 语句中使用它。

function UserException(message){this.message = message;this.name = "UserException";
}function getMonthName(mo) {mo = mo - 1;	//	调整月份数字到数组索引(1 = Jan,12 = Dec)var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];if(months[mo] !== undefined) {return months[mo];} elese {throw new UserException("InvalidMonthNo");}
}try{// statements to tryvar myMonth = 15;	//	超出边界并引发异常var monthName = getMonthName(myMonth);
} catch (e) {var monthName = "unkown";console.log(e.message, e.name);		// 传递异常对象到错误处理
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/753030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言项目:数组与函数实践:扫雷游戏

目录 目录&#xff1a; 1.扫雷游戏分析与设计 1.1扫雷游戏的功能说明&#xff1a; 1.1.1使用控制台实现经典扫雷的游戏 1.1.2游戏可以通过菜单实现继续玩或者退出游戏 1.1.3扫雷棋盘是9*9的格子 1.1.4默认随机布置10个雷 1.1.5 可以排查雷 2.扫雷游戏的代码实现 1.遇到的问题…

项目文章|真菌ChIP-seq+RNA-seq解析脱落酸生物合成的调控机制

组蛋白翻译后修饰是表观遗传调控的主要机制之一&#xff0c;已被证明在基因表达的调控中发挥重要作用&#xff0c;参与真菌发育、感染相关的形态发生、环境应激反应、次级代谢产物的生物合成和致病性。我们分享过不少真菌组蛋白修饰的文章&#xff0c;今天接着带来一篇利用ChIP…

Anaconda安装proplot库

看了一下Anaconda中的环境&#xff0c;现在我有4个&#xff0c;其中gee是一个虚拟环境 因此一般在prompt中装库时要先进入其中一个虚拟环境 conda activate geepip install proplot --no-deps下完了之后&#xff0c;发现版本不对应 conda install matplotlib3.4.3

软件开发项目管理/研发项目管理软件:国产EDA工具厂商行芯科技上线奥博思PowerProject项目管理软件平台

国内领先的EDA工具链提供商杭州行芯科技有限公司&#xff08;以下简称&#xff1a;行芯科技&#xff09;与北京奥博思软件技术有限公司达成战略合作&#xff0c;奥博思软件将基于PowerProject项目管理系统助力行芯科技实现研发项目的全生命周期管理&#xff0c;提升管理效能&am…

vue系列:使用vue3、ant-d,a-select下拉的搜索功能

背景 记录一下 大屏项目中&#xff0c;下拉数据过多&#xff0c;想使用下拉搜索功能&#xff1b; 输入汉字&#xff0c;匹配对应的项目&#xff1b; 解决方案 关键代码如下&#xff1a; a-select控件 <a-selectv-model:value"state.schemeInfo.monitorList"sho…

论文阅读:Face Deblurring using Dual Camera Fusion on Mobile Phones

今天介绍一篇发表在 ACM SIGGRAPH 上的文章&#xff0c;是用手机的双摄系统来做人脸去模糊的工作。这也是谷歌计算摄影研究组的工作。 快速运动物体的运动模糊在摄影中是一个一直以来的难题&#xff0c;在手机摄影中也是非常常见的问题&#xff0c;尤其在光照不足&#xff0c;…

短链码生成方案探讨思维链路

前段时间在做短链平台项目时&#xff0c;对短链码的生成进行了研究&#xff0c;我将思维活动和方案探讨过程进行了记录&#xff0c;文章没什么干货&#xff0c;都是思维过程。 短链码生成方式&#xff0c;应具备以下几个特点&#xff1a;生成性能强劲、碰撞概率低&#xff08;避…

jasypt加解密

项目中经常遇到jasypt加解密的配置文件&#xff0c;尤其是项目不是自己创建的时候&#xff0c;压根不知道加密的内容是什么&#xff0c;而配置文件中一般加密的也都是数据库或其他非结构型数据库的账号或密码&#xff0c;这时候想要看一下db的内容就非常的头疼&#xff0c;除了…

OSDI 2023

17th USENIX Symposium on Operating Systems Design and Implementation, OSDI 2023, Boston, MA, USA, July 10-12, 2023. 第17届USENIX操作系统设计与实现研讨会&#xff0c;OSDI 2023&#xff0c;2023年7月10-12日&#xff0c;美国马萨诸塞州波士顿。 1. Ship your Criti…

【爬虫】– 抓取原创力文档数据

使用RPA工具&#xff0c;实现针对于原创力中不可下载文档的抓取&#xff0c;可延用于其他类似文库 1 使用工具、环境 影刀RPA、WPS Office、谷歌浏览器&#xff08;非指定&#xff09; 2 代码流程 3 关键点 此方案只适合抓取非VIP即可预览全文的文档&#xff0c;抓取下来的数…

B007-springcloud alibaba 消息驱动 Rocketmq

目录 MQ简介什么是MQMQ的应用场景异步解耦流量削峰 常见的MQ产品 RocketMQ入门RocketMQ环境搭建环境准备安装RocketMQ启动RocketMQ测试RocketMQ关闭RocketMQ RocketMQ的架构及概念RocketMQ控制台安装 消息发送和接收演示发送消息接收消息 案例订单微服务发送消息用户微服务订阅…

(done) 解释 python3 torch.utils.data DataLoader

特别注意&#xff1a;DataLoader 返回的迭代器是无尽的&#xff0c;依据如下 (CHATGPT3.5) DataLoader 返回的迭代器默认情况下是无尽的&#xff0c;因为它会无限地循环遍历数据集&#xff0c;以提供批量的数据。在训练神经网络时&#xff0c;通常会使用无尽的迭代器来循环遍历…

LEETCODE 100255. 成为 K 特殊字符串需要删除的最少字符数

整体思路: 1.可以看到这道题是要求是最小的&#xff0c;那么可以想到遍历所有情况 2.把题干已知条件转换为一个数组&#xff0c;那么只需要以数组每个元素为开头遍历所有情况即可。 3.对于一个数考虑其后面的情况&#xff0c;其后每个数等于这个数k和数本身的最小值(遍历累计求…

spring boot 运行mongodb sql

因项目数据放到了Mongodb 中&#xff0c;需在Mongodb 中查询数据&#xff0c;网上找了好久总算找到了实现方式 借用本地命令号读取命令行数据 主要是分2步&#xff1a; 1、下载 sql-to-mongo-db-query-converter 这个是一个3放插件 作用是将sql语句转成 Mongodb shell 语句…

2024数据结构面试常见问题

大家好&#xff01;今天我要和大家分享的是2024年数据结构面试常见问题。无论你是编程新手&#xff0c;还是有一定基础的开发者&#xff0c;掌握这些数据结构面试问题&#xff0c;都将助你在面试中脱颖而出&#xff0c;赢得心仪的offer。 下面&#xff0c;我们就一起来学习这些…

参数高效微调(PEFT)技术概览

参数高效微调&#xff08;PEFT&#xff09;技术概览 在大型语言模型&#xff08;LLMs&#xff09;的世界里&#xff0c;参数量庞大&#xff0c;通常在70亿至700亿之间。这些模型的自监着训练成本高昂&#xff0c;对公司可能意味着高达1亿美元的支出。而对于资源相对有限的研究…

rlwrap安装

引言 我们在使用sqlplus对oracle数据库进行操作的时候&#xff0c;难免会出现这样一种情况&#xff1a;写完一长串命令后发现中间有书写错误的地方&#xff0c;这个时候如果我们想移动光标去修正错误的地方&#xff0c;会出现类似如下的现象&#xff1a; SQL> select name…

python的封装应用

封装在Python中有许多应用场景&#xff0c;其中一些主要的应用包括&#xff1a; 隐藏实现细节&#xff1a; 通过将数据和实现细节封装在类内部&#xff0c;可以隐藏对象的内部状态和实现细节&#xff0c;从而提高代码的安全性和可维护性。 class BankAccount: def __init…

Codeforces Round 934 (Div. 2) --- C. MEX Game 1 --- 题解

C. MEX Game 1&#xff1a; 题目大意&#xff1a; 思路解析&#xff1a; 重要的是那种只有一个的数字&#xff0c;因为如果这个数字有两个及以上&#xff0c;那么我可以再鲍勃删除之后&#xff0c;再拿&#xff0c;也一定能拿得到&#xff0c;所以瓶颈是只有一个的数字&#x…

爬虫3_爬取翻页URL不变的网站

之前实现了对大学排数据爬取&#xff1a;爬虫2_2019年549所中国大学排名. 近期复现代码&#xff0c;发现原网站升级&#xff0c;在翻页时&#xff0c;发现URL不改变&#xff0c;修改代码&#xff0c;使用网页自动化工具selenium实现对该类网站数据获取。 #-*- coding: UTF-8 -…