TypeScript入门 (二)控制语句

head-bar

引言

大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年9月学习赛的TypeScript学习总结文档。本文主要讲解TypeScript中控制语句的部分;希望通过我的知识点总结,能够帮助你更好地学习TypeScript。💕💕😊


一、介绍

在编程开发中,控制语句是实现程序逻辑的关键部分。TypeScript 提供了丰富的控制语句,包括条件语句、循环语句和函数。通过这些控制语句,用户可以编写更加复杂和功能强大的程序。接下来,作者将详细探讨这些控制语句的语法、使用方法以及代码案例。


二、条件语句

条件语句用于根据不同的条件执行不同的代码块。TypeScript 提供了多种条件语句,包括 ifelseelse ifswitch

1. if 语句

if 语句用于在条件为 true 时执行代码块。

语法:

if (boolean_expression) {// 在布尔表达式 boolean_expression 为 true 时执行
}

思路分析:

  • boolean_expression 是一个布尔表达式,如果其值为 true,则执行 if 语句块中的代码。
  • 如果 boolean_expressionfalse,则跳过 if 语句块,继续执行后续代码。

代码案例:

var num: number = 5;
if (num > 0) {console.log("数字是正数");
}

这里的num > 0是逻辑运算符,这里结果为true;

2. else 语句

一个 if 语句后可跟一个可选的 else 语句,else 语句在布尔表达式为 false 时执行。

语法:

if (boolean_expression) {// 在布尔表达式 boolean_expression 为 true 时执行
} else {// 在布尔表达式 boolean_expression 为 false 时执行
}

代码案例:

var num: number = 12;
if (num % 2 == 0) {console.log("偶数");
} else {console.log("奇数");
}

3. else if 语句

if...else if....else 语句在执行多个判断条件的时候很有用。

语法:

if (boolean_expression_1) {// 在布尔表达式 boolean_expression_1 为 true 时执行
} else if (boolean_expression_2) {// 在布尔表达式 boolean_expression_2 为 true 时执行
} else if (boolean_expression_3) {// 在布尔表达式 boolean_expression_3 为 true 时执行
} else {// 布尔表达式的条件都为 false 时执行
}

代码案例:

var num: number = 2;
if (num > 0) {console.log(num + " 是正数");
} else if (num < 0) {console.log(num + " 是负数");
} else {console.log(num + " 不是正数也不是负数");
}

4. switch 语句

一个 switch 语句允许测试一个变量等于多个值时的情况。每个值称为一个 case,且被测试的变量会对每个 switch case 进行检查。

语法:

switch (expression) {case constant-expression:statement(s);break; // 可选的case constant-expression:statement(s);break; // 可选的// 您可以有任意数量的 case 语句default: // 可选的statement(s);
}

代码案例:

var grade: string = "A";
switch (grade) {case "A": {console.log("优");break;}case "B": {console.log("良");break;}case "C": {console.log("及格");break;}case "D": {console.log("不及格");break;}default: {console.log("非法输入");break;}
}

这里则会执行打印 “优”


三、循环语句

循环语句用于重复执行某段代码,直到满足特定条件为止。TypeScript 提供了多种循环语句,包括 forwhiledo...while

1. for 循环

for 循环用于重复执行一段代码,直到满足特定条件为止。

语法:

for (init; condition; increment) {statement(s);
}

代码案例:

for (let i: number = 0; i < 5; i++) {console.log(i);
}

这里等待i>=5时才会停止循环

2. for...in 循环

for…in 语句用于迭代对象的属性。它遍历对象的可枚举属性,包括从原型链继承的属性。

语法:

for (var key in object) {// 语句
}

代码案例:

var obj = {a: 1, b: 2, c: 3};for (var key in obj) {if (obj.hasOwnProperty(key)) {console.log(key + ": " + obj[key]);}
}

3. for...of 循环

for…of 语句创建一个循环来迭代可迭代的对象,如数组、字符串、映射、集合等。它遍历对象的值,而不是属性。

语法:

for (let val of iterable) {// 语句
}

代码案例:

let someArray = [1, "string", false];for (let entry of someArray) {console.log(entry); // 1, "string", false
}

4. forEacheverysome 循环

forEacheverysome 是 JavaScript 的循环语法,TypeScript 作为 JavaScript 的语法超集,当然默认也是支持的。

代码案例:

let list = [4, 5, 6];
list.forEach((val, idx, array) => {console.log(`元素: ${val}, 索引: ${idx}, 数组: ${array}`);
});let allPositive = list.every((val, idx, array) => {return val > 0;
});
console.log(allPositive); // 输出: truelet hasEven = list.some((val) => {return val % 2 === 0;
});
console.log(hasEven); // 输出: true
  • every是当列表中的所有元素都满足某个条件时返回every,否则返回false;
  • some是只要列表中存在一个元素满足条件,即可返回true;

5. while 循环

while 语句在给定条件为 true 时,重复执行语句或语句组。

语法:

while (condition) {statement(s);
}

代码案例:

var num: number = 5;
var factorial: number = 1;while (num >= 1) {factorial = factorial * num;num--;
}
console.log("5 的阶乘为:" + factorial);

只有判断条件为false或者使用break关键字时能跳出循环;

6. do...while 循环

do...while 循环是在循环的尾部检查它的条件。

语法:

do {statement(s);
} while (condition);

代码案例:

var n: number = 10;
do {console.log(n);n--;
} while (n >= 0);

7. break 语句

break 语句用于终止循环或 switch 语句。

代码案例:

var i: number = 1;
while (i <= 10) {if (i % 5 == 0) {console.log("在 1~10 之间第一个被 5 整除的数为 : " + i);break; // 找到一个后退出循环}i++;
}

8. continue 语句

continue 语句用于跳过当前循环中的代码,强迫开始下一次循环。

代码案例:

var num: number = 0;
var count: number = 0;for (num = 0; num <= 20; num++) {if (num % 2 == 0) {continue;}count++;
}
console.log("0 ~20 之间的奇数个数为: " + count); // 输出10个奇数

四、函数

函数是一组一起执行一个任务的语句。TypeScript 中的函数可以有参数和返回值,并且支持函数重载和箭头函数。

1. 函数声明

函数声明定义了一个函数及其参数和返回类型。

语法:

function function_name(param1: type, param2: type): return_type {// 函数体return value;
}

代码案例:

function greet(): string { // 返回一个字符串return "Hello World";
}function caller() {var msg = greet(); // 调用 greet() 函数console.log(msg);
}caller(); // 输出: Hello World

2. 函数返回值

函数可以通过 return 语句返回值。

语法:

function function_name(): return_type {// 语句return value;
}

代码案例:

function add(a: number, b: number): number {return a + b;
}console.log(add(1, 2)); // 输出: 3

如果语句是return 后面不带有返回值,说明是暂停当前函数下一步执行;

3. 带参数函数

函数可以接受参数,并在函数体内使用这些参数。

语法:

function func_name(param1: datatype, param2: datatype) {// 函数体
}

代码案例:

function add(x: number, y: number): number {return x + y;
}console.log(add(1, 2)); // 输出: 3

4. 可选参数

在 TypeScript 函数里,我们可以将参数设置为可选,可选参数使用问号标识 ?

语法:

function func_name(param1: type, param2?: type) {// 函数体
}

代码案例:

function buildName(firstName: string, lastName?: string) {if (lastName)return firstName + " " + lastName;elsereturn firstName;
}let result1 = buildName("Bob"); // 正确
let result2 = buildName("Bob", "Adams"); // 正确

5. 默认参数

我们可以设置参数的默认值,这样在调用函数的时候,如果不传入该参数的值,则使用默认参数。

语法:

function func_name(param1: type, param2: type = default_value) {// 函数体
}

这里可以看作是变量定义和有参函数的结合

代码案例:

function calculate_discount(price: number, rate: number = 0.50) {var discount = price * rate;console.log("计算结果: ", discount);
}calculate_discount(1000); // 计算结果: 500
calculate_discount(1000, 0.30); // 计算结果: 300

6. 剩余参数

剩余参数语法允许我们将一个不确定数量的参数作为一个数组传入。

语法:

function func_name(param1: type, ...restOfName: type[]) {// 函数体
}

代码案例:

function addNumbers(...nums: number[]) {var i;var sum: number = 0;for (i = 0; i < nums.length; i++) {sum = sum + nums[i];}console.log("和为:", sum);
}addNumbers(1, 2, 3); // 和为: 6
addNumbers(10, 10, 10, 10, 10); // 和为: 50

这里的… 表示展开符号,其会将这个列表中所有的元素都展开;

7. 匿名函数

匿名函数是一个没有函数名的函数。匿名函数在程序运行时动态声明,除了没有函数名外,其他的与标准函数一样。

语法:

var res = function([arguments]) {// 函数体
};

代码案例:

var msg = function() {return "hello world";
};
console.log(msg()); // hello worldvar res = function(a: number, b: number) {return a * b;
};
console.log(res(12, 2)); // 24

8. 匿名函数自调用

匿名函数自调用在函数后使用 () 即可。

代码案例:

(function() {var x = "Hello!!";console.log(x);
})(); // Hello!!

9. 构造函数

TypeScript 也支持使用 JavaScript 内置的构造函数 Function() 来定义函数。

语法:

var res = new Function([arg1[, arg2[, ...argN]],] functionBody);

代码案例:

var myFunction = new Function("a", "b", "return a * b");
var x = myFunction(4, 3);
console.log(x); // 12

10. 递归函数

递归函数即在函数内调用函数本身。递归函数在处理需要重复执行相同操作的问题时非常有用,例如计算阶乘、斐波那契数列等。

代码案例:

function factorial(number: number): number {if (number <= 0) {         // 停止执行return 1;} else {return (number * factorial(number - 1));     // 调用自身}
}
console.log(factorial(6));      // 输出 720

11. Lambda 函数

Lambda 函数也称之为箭头函数。箭头函数表达式的语法比函数表达式更短。

语法:

( [param1, param2,…param n] )=>statement;

代码案例:

var foo = (x: number) => 10 + x;
console.log(foo(100));      // 输出结果为 110

箭头函数也可以是一个语句块:

语法:

( [param1, param2,…param n] )=> {// 代码块
}

代码案例:

var foo = (x: number) => {x = 10 + x;console.log(x);
};
foo(100); // 输出 110

在vue等前端框架中,箭头函数很常用!

12. 函数重载

函数重载允许函数根据不同的参数类型和数量执行不同的操作。TypeScript 中的函数重载通过定义多个同名函数来实现,每个函数的参数类型和返回类型可以不同。

语法:

function function_name(param1: type1): return_type1;
function function_name(param2: type2): return_type2;
function function_name(param: type1 | type2): return_type1 | return_type2 {// 函数体
}

代码案例:

function disp(s1: string): void;
function disp(n1: number, s1: string): void;function disp(x: any, y?: any): void {console.log(x);console.log(y);
}disp("abc"); // 输出: abc, undefined
disp(1, "xyz"); // 输出: 1, xyz

总结

在本文中,我们深入学习了 TypeScript 的控制语句基本知识,包括条件语句、循环语句和函数。这些知识点是编程的基础,尤其是条件语句和循环语句,需要通过不断的练习来牢记。函数部分则可以根据实际应用场景来逐步完善和加深记忆。

在下一篇文章中,我们将继续探讨 TypeScript 的高级特性,包括类、接口、泛型等,敬请期待!🚀


相关链接

  • 项目地址:TypeScript-CookBook
  • 相关文档:专栏地址
  • 作者主页:GISer Liu-CSDN博客

thank_watch

如果觉得我的文章对您有帮助,三连+关注便是对我创作的最大鼓励!或者一个star🌟也可以😂.

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

STM32MP157/linux驱动学习记录(二)

38.Linux INPUT 子系统实验 按键、鼠标、键盘、触摸屏等都属于输入(input)设备&#xff0c;Linux 内核为此专门做了一个叫做 input子系统的框架来处理输入事件。输入设备本质上还是字符设备&#xff0c;只是在此基础上套上了 input 框架&#xff0c;用户只需要负责上报输入事件…

Sapiens——人类视觉大模型的基础

引言 大规模预训练以及随后针对特定任务的语言建模微调取得了显著成功&#xff0c;已将这种方法确立为标准做法。同样&#xff0c; 计算机视觉方法正逐步采用大规模数据进行预训练。LAION5B、Instagram-3.5B、JFT-300M、LVD142M、Visual Genome 和 YFCC100M 等大型数据集的出现…

管道缺陷检测系统源码分享

管道缺陷检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

【2024】前端学习笔记7-颜色-位置-字体设置

学习笔记 1.定义&#xff1a;css2.颜色&#xff1a;color3.字体相关属性&#xff1a;font3.1.字体大小&#xff1a;font-size3.2.字体风格&#xff1a;font - style3.3.字体粗细&#xff1a;font - weight3.4.字体族&#xff1a;font - family 4.位置&#xff1a;text-align 1.…

Springboot与minio:

一、介绍 Minio是一个简单易用的云存储服务&#xff0c;它让你可以轻松地把文件上传到互联网上&#xff0c;这样无论你在哪里&#xff0c;只要有网络&#xff0c;就能访问或分享这些文件。如果你想要从这个仓库里取出一张图片或一段视频&#xff0c;让网站的访客能看到或者下载…

火狐浏览器同源策略禁止解决方案

Firefox火狐浏览器控制台,提示:已拦截跨源请求&#xff1a;同源策略禁止读取位于 http://127.0.0.1:5000/test.zip 的远程资源。&#xff08;原因&#xff1a;CORS 头缺少 Access-Control-Allow-Origin&#xff09;。状态码&#xff1a;200。 前言全局说明 Firefox火狐浏览器控…

图片文字翻译怎么快速翻译?5个软件教你快速进行图片文字翻译

图片文字翻译怎么快速翻译&#xff1f;5个软件教你快速进行图片文字翻译 图片文字翻译是日常工作和生活中常见的需求&#xff0c;尤其是在处理外文资料或旅游时。以下5款优秀的软件可以帮助你轻松、快速地将图片中的文字进行翻译&#xff0c;让你不再依赖手动输入和繁琐操作。…

Python燃烧废气排放推断算法模型

&#x1f3af;要点 宏观能耗场景模型参数化输入数据&#xff0c;分析可视化输出结果&#xff0c;使用场景时间序列数据模型及定量和定性指标使用线图和箱线图、饼图、散点图、堆积条形图、桑基图等可视化模型输出结果根据气体排放过程得出其时间序列关系&#xff0c;使用推断模…

镀金引线---

一、沉金和镀金 沉金和镀金都是常见的PCB金手指处理方式&#xff0c;它们各有优劣势&#xff0c;选择哪种方式取决于具体的应用需求和预算。 沉金&#xff08;ENIG&#xff09;是一种常用的金手指处理方式&#xff0c;它通过在金手指表面沉积一层金层来提高接触性能和耐腐蚀性…

链条缺陷检测系统源码分享

链条缺陷检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

Java-数据结构-优先级队列(堆)-(一) (;´д`)ゞ

文本目录&#xff1a; ❄️一、优先级队列&#xff1a; ➷ 1、概念&#xff1a; ❄️二、优先级队列的模拟实现&#xff1a; ➷ 1、堆的概念&#xff1a; ➷ 2、堆的性质&#xff1a; ➷ 3、堆的创建&#xff1a; ▶ 向下调整&#xff1a; ➷ 4、堆的插入和删除&#xff1a; …

Linux权限管理: 文件访问者分类、文件类型和访问权限、权限值的表示方法、文件访问权限的相关设置方法、umask、目录的权限、粘滞位等的介绍

文章目录 前言一、文件访问者分类二、文件类型和访问权限1. 文件类型2. 基本权限 三、权限值的表示方法1. 字符表示方法2. 8进制数值表示方法 四、文件访问权限的相关设置方法1. chmod2. chown3. chgrp 五、 umask六、目录的权限七、粘滞位总结 前言 Linux权限管理&#xff1a…

论文不会写?分享6款AI论文写作免费一键生成网站!

在当今学术研究和写作领域&#xff0c;AI论文写作工具的出现极大地提高了写作效率和质量。这些工具不仅能够帮助研究人员快速生成论文草稿&#xff0c;还能进行内容优化、查重和排版等操作。本文将分享6款免费一键生成AI论文写作网站&#xff0c;并重点推荐千笔-AIPassPaper。 …

鸿蒙OpenHarmony【轻量系统芯片移植】物联网解决方案之芯海cst85芯片移植案例

物联网解决方案之芯海cst85芯片移植案例 本文介绍基于芯海cst85芯片的cst85_wblink开发板移植OpenHarmony LiteOS-M轻量系统的移植案例。开发了Wi-Fi连接样例和XTS测试样例&#xff0c;同时实现了wifi_lite, lwip, startup, utils, xts, hdf等部件基于OpenHarmony LiteOS-M内核…

初学者如何快速入门大语言模型(LLM)?

初学者如何快速入门大语言模型&#xff08;LLM&#xff09; 知乎大佬已给出了比较合理的方案&#xff0c;小白千万别走弯路了&#xff0c;下面给大家梳理和解读&#xff1a; 技术要求&#xff1a;要入门大语言模型&#xff0c;需要掌握以下基本技术&#xff1a; 开发语言&…

模拟实现string类: clear函数、流提取(<<)和流插入(>>)运算符重载、>、<、==、<=、>=、!=的运算符重载、赋值运算符(=)重载等的介绍

文章目录 前言一、 clear函数二、流提取(<<)和流插入(>>)运算符重载三、 >、<、、<、>、!的运算符重载四、赋值运算符&#xff08;&#xff09;重载总结 前言 模拟实现string类: clear函数、流提取(<<)和流插入(>>)运算符重载、>、<…

上线跨境电商商城的步骤

上线一个跨境电商商城涉及多个步骤&#xff0c;从前期准备到上线后的维护。以下是一些关键步骤&#xff1a; 1. 市场调研与规划 目标市场分析&#xff1a;研究目标市场的需求、竞争对手和消费者行为。法律法规&#xff1a;了解并遵守目标市场的法律法规&#xff0c;包括税收、…

git学习【持续更新中。。。】

git学习【持续更新中。。。】 文章目录 git学习【持续更新中。。。】一、Git基本操作1.创建本地仓库2.配置本地仓库1.局部配置2.全局配置 3.认识工作区、暂存区、版本库4.添加文件5.修改文件6.版本回退7.撤销修改8.删除文件 二、Git分支管理1.理解分支2.创建、切换、合并分支3.…

YOLOv8改进:SA注意力机制【注意力系列篇】(附详细的修改步骤,以及代码,与其他一些注意力机制相比,不仅准确度更高,而且模型更加轻量化。)

如果实验环境尚未搭建成功&#xff0c;可以参考这篇文章 ->【YOLOv8超详细环境搭建以及模型训练&#xff08;GPU版本&#xff09;】 文章链接为&#xff1a;http://t.csdnimg.cn/8ZmAm ---------------------------------------------------------------------------​---…

亲测有效,长期有效的RTSP流地址公网RTSP地址,各种类型的视频源

我们经常需要做一些实时视频流的测试&#xff0c;但是手边又没有办法及时弄到一个摄像机&#xff0c;我们经常会去搜索一下“公网RTSP地址”&#xff0c;但是大部分现在都失效了&#xff0c;有什么办法能够让我们快速构建一个RTSP流&#xff0c;点几下就能直接用&#xff1f; …