TypeScript入门 (二)控制语句
引言
大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年9月学习赛的TypeScript学习总结文档。本文主要讲解TypeScript中控制语句的部分;希望通过我的知识点总结,能够帮助你更好地学习TypeScript。💕💕😊
一、介绍
在编程开发中,控制语句是实现程序逻辑的关键部分。TypeScript 提供了丰富的控制语句,包括条件语句、循环语句和函数。通过这些控制语句,用户可以编写更加复杂和功能强大的程序。接下来,作者将详细探讨这些控制语句的语法、使用方法以及代码案例。
二、条件语句
条件语句用于根据不同的条件执行不同的代码块。TypeScript 提供了多种条件语句,包括 if
、else
、else if
和 switch
。
1. if
语句
if
语句用于在条件为 true
时执行代码块。
语法:
if (boolean_expression) {// 在布尔表达式 boolean_expression 为 true 时执行
}
思路分析:
boolean_expression
是一个布尔表达式,如果其值为true
,则执行if
语句块中的代码。- 如果
boolean_expression
为false
,则跳过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 提供了多种循环语句,包括 for
、while
和 do...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. forEach
、every
和 some
循环
forEach
、every
和 some
是 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博客
如果觉得我的文章对您有帮助,三连+关注便是对我创作的最大鼓励!或者一个star🌟也可以😂.
相关文章:

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

MVP 最简可行产品
MVP(最小可行产品)是一种产品开发策略,其主要目的是用最少的时间和资源,开发一个包含最基本必要功能的产品。这样做的目的是能够以最小的成本进入市场,获取用户反馈,再根据反馈逐步优化产品。 MVP是什么 …...

数仓工具:datax
datax可以理解为sqoop的优化版, 速度比sqoop快 因为sqoop底层是map任务,而datax底层是基于内存 DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定…...

CSS传统布局方法(补充)——WEB开发系列37
开发技术不断演进,布局方式也经历了多个阶段的变革。从最初的基于表格布局到 CSS 的浮动布局,再到今天的弹性盒(Flexbox)与 CSS Grid 网格布局,每一种布局方式都有其独特的背景和解决特定问题的优势。 一、CSS Grid 出…...

【系统架构设计师】软件架构的风格(经典习题)
更多内容请见: 备考系统架构设计师-核心总结索引 文章目录 【第1题】【第2题】【第3~4题】【第5题】【第6题】【第7题】【第8题】【第9题】【第10题】【第11题】【第12题】【第13题】【第14题】【第15~16题】【第17题】【第18~19题】【第20~21题】【第22题】【第23题】【第24~…...

网页打开时,下载的文件fetcht类型?有什么作用?
fetch API是一种用于向服务器发送请求并获取响应的现代Web API。它支持获取各种类型的数据,包括文本、JSON、图像和文件等。fetch API的主要优势之一是支持流式传输和取消请求,这使得处理大型数据集和长时间运行的操作变得更加简单和可靠。此外&…...

作为HR,如何考察候选人的专业知识与技能
这是严肃的话题,如何考察候选人的专业知识和技能。HR招聘是一个让我们既爱又恨的过程。爱的是,我们有机会遇到各种各样的人才;恨的是,要从茫茫人海中找到那个“对的人”简直比找一根针在干草堆里还难。 本系列的文章,…...

阻止冒泡事件
每一div都有一个切换事件 div里包括【复制】事件, 点击【复制按钮】,会触发【切换事件】 因为冒泡 在 Vue 3 中,阻止 click 事件冒泡可以使用以下常规方法: 1 事件修饰符:Vue 3 中提供了多种事件修饰符,…...

聊聊Netty对于内存方面的优化
写在文章开头 Netty通过巧妙的内存使用技巧尽可能节约内存空间,进而减少java中Full gc的STW的时间,由此间接的提升了程序的性能,本文也将直接从源码的角度分析一下Netty对于内存方面的使用技巧,希望对你有所启发。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java…...

2024年轻人驯化AI指南
或许Python编程是答案 我为您精心准备了一份全面的Python学习大礼包,完全免费分享给每一位渴望成长、希望突破自我现状却略感迷茫的朋友。无论您是编程新手还是希望深化技能的开发者,都欢迎加入我们的学习之旅,共同交流进步! &…...

算法:双指针题目练习
文章目录 算法:双指针移动零复写零快乐数盛最多水的容器有效三角形的个数查找总价格为目标值的两个商品三数之和四数之和 总结 算法:双指针 移动零 定义两个指针,slow和fast.用这两个指针把整个数组分成三块. [0,slow]为非零元素,[slow1,fast-1]为0元素,[fast,num.length]为未…...

傅里叶变换的基本性质和有关定理
一、傅里叶变换的基本性质 1.1 线性性质 若 则 其中:a,b是常数 函数线性组合的傅里叶变换等于歌函数傅里叶变换的相应组合。 1.2 对称性 若 则 关于傅里叶变换的对称性还有 虚、实、奇、偶函数的傅里叶变换性质: 1.3 迭次傅里叶变换 对f(x,y)连续两次做二维傅里叶变换…...

VIM使用技巧
VIM使用技巧;VIM常用快捷键;vim常用命令;VIM常用快捷命令;vim使用技巧 VIM使用技巧 移动光标 hjkl,h光标向前移动一个字符的位置;j光标向下移动一行;k光标向上移动一行;l光标向后移动一个字符…...

C语言进阶【4】---数据在内存中的存储【1】(你不想知道数据是怎样存储的吗?)
本章概述 整数在内存中的存储大小端字节序和字节序判断练习1练习2练习3练习4练习5练习6 彩蛋时刻!!! 整数在内存中的存储 回忆知识:在讲操作符的那章节中,对于整数而言咱们讲过原码,反码和补码。整数分为有…...

【mysql面试题】mysql复习之常见面试题(一)
本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…...

VB.NET中如何利用ASP.NET进行Web开发
在VB.NET中利用ASP.NET进行Web开发是一个常见的做法,特别是在需要构建动态、交互式Web应用程序时。ASP.NET是一个由微软开发的开源Web应用程序框架,它允许开发者使用多种编程语言(包括VB.NET)来创建Web应用程序。以下是在VB.NET中…...

vue2+js项目升级vue3项目流程
Vue 3 相较于 Vue 2 在性能、特性和开发体验上都有了显著的提升。升级到 Vue 3 可以让你的项目受益于这些改进。但是,升级过程也需要谨慎,因为涉及到代码的重构和潜在的兼容性问题。 1. 升级前的准备 备份项目: 在开始升级之前,…...

做EDM邮件群发营销时如何跟进外贸客户?
跟进外贸客户是外贸业务中至关重要的一环,需要耐心和策略。以下是一些建议,帮助你有效跟进外贸客户: 充分了解产品: 深入了解自己的产品,包括品质、价格竞争力、适用市场等。 只有对产品有充分的了解,才…...

【Java经典游戏】-01-是男人就坚持30秒
hello!各位彦祖们!我们又见面了!! 今天兄弟我给大家带来了一款经典趣味小游戏的项目案例-是男人就坚持30秒 本项目案例涉及到的技术: Java 语法基础Java 面向对象JavaSwing 编程Java 线程 是一个非常适合小白来加强…...

微调框QSpinBox
作用:允许用户按照一定的步长,来增加或减少其中显示的数值 有两种类型的微调框 QSpinBox - 用于整数的显示和输入QDoubleSpinBox - 用于浮点数的显示和输入 值 包括最大值、最小值、当前值 // 获取和设置当前值 int value() const void setValue(in…...

在线查看 Android 系统源代码 AOSPXRef and AndroidXRef
在线查看 Android 系统源代码 AOSPXRef and AndroidXRef 1. AOSPXRef1.1. http://aospxref.com/android-14.0.0_r2/1.2. build/envsetup.sh 2. AndroidXRef2.1. http://androidxref.com/9.0.0_r3/2.2. build/envsetup.sh 3. HELLO AndroidReferences 1. AOSPXRef http://aospx…...

JavaScript substr() 方法
定义和用法 substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。 <script type"text/javascript">var str"Hello world!" document.write(str.substr(3))</script>lo world!<script type"text/javascript">v…...

教你把图片转换为炫酷的翻页电子杂志
翻页电子杂志以其炫酷的视觉效果和便捷的阅读方式,受到了许多用户的喜爱。想要把普通的图片转换成这样的效果,其实并不复杂。下面,就让我来为您介绍一下如何操作。 首先,您需要准备一些基本的工具和材料。您需要一个图像编辑软件…...

生信软件35 - AI代码编辑器Cursor
1. Cursor - AI代码编辑器 Cursor的核心功能是利用生成式AI,帮助程序员通过自然语言描述快速生成代码。让程序员未来需要关注的是“做什么”(What)而不是“怎么做”(How),即在使用AI生成代码的基础上&…...

Vue Router 编程式导航全攻略:深入掌握 push, replace, go, back, forward,beforeEach 方法
Vue Router 编程式导航全攻略:深入掌握 push, replace, go, back, forward,beforeEach 方法 在Vue Router中,编程式导航是一种通过JavaScript代码来实现路由跳转的方法。与声明式导航(使用<router-link>标签)相比ÿ…...

切换淘宝最新镜像源:优化NPM包管理的极致体验
在NPM生态系统中,快速、安全地获取所需的包是每个前端工程师追求的目标。然而,由于不同地区的网络环境,直接通过官方NPM仓库获取包可能会导致下载速度缓慢、超时等问题。针对这些情况,淘宝团队提供了优秀的NPM镜像源,并且定期更新。本文将详尽介绍如何切换淘宝最新镜像源,…...

react 基础语法
前置知识 类的回顾 通过class关键字定义一个类 类名首字母大写 class类有constructor构造器 new 一个类得到一个实例 类还有方法,该方法也会在其原型上 static静态数据,访问静态属性通过 类名.id getter和setter getter:定义一个属性&…...

k8s的NodeIP、PodIP、ClusterIP、ExternalIP
1.NodeIP K8s集群由Master Node与Worker Node组成。 Node:组成k8s集群的机器,可以是物理机或虚拟机。 Master Node :管理节点也叫控制平面主要负责管理控制方面。 Worker Node::工作节点用于部署处理业务的工作负载或p…...

【vue element-ui】关于删除按钮的提示框,可一键复制
实现效果: Delete: function (id) {this.$confirm(此操作将永久删除该文件, 是否继续?, 提示, {confirmButtonText: 确定,cancelButtonText: 取消,type: warning,center: true,}).then(() > {Delete(id).then(() > {this.$message({type: success,message: 删…...

内部工具使用
1. displaytool 开发的渲染工具,如将车端建图结果显示在渲染窗口中,便于查bug 2. localization / csmap 开发的定位工具 和 车端建图工具 3. bolepack 第三方,处理感知数据的工具 运行流程:1-> 2 -> 3 bol…...