当前位置: 首页 > news >正文

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🌟也可以😂.

相关文章:

TypeScript入门 (二)控制语句

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

MVP 最简可行产品

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

数仓工具:datax

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

CSS传统布局方法(补充)——WEB开发系列37

开发技术不断演进&#xff0c;布局方式也经历了多个阶段的变革。从最初的基于表格布局到 CSS 的浮动布局&#xff0c;再到今天的弹性盒&#xff08;Flexbox&#xff09;与 CSS Grid 网格布局&#xff0c;每一种布局方式都有其独特的背景和解决特定问题的优势。 一、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。它支持获取各种类型的数据&#xff0c;包括文本、JSON、图像和文件等。fetch API的主要优势之一是支持流式传输和取消请求&#xff0c;这使得处理大型数据集和长时间运行的操作变得更加简单和可靠。此外&…...

作为HR,如何考察候选人的专业知识与技能

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

阻止冒泡事件

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

聊聊Netty对于内存方面的优化

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

2024年轻人驯化AI指南

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

算法:双指针题目练习

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

傅里叶变换的基本性质和有关定理

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

VIM使用技巧

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

C语言进阶【4】---数据在内存中的存储【1】(你不想知道数据是怎样存储的吗?)

本章概述 整数在内存中的存储大小端字节序和字节序判断练习1练习2练习3练习4练习5练习6 彩蛋时刻&#xff01;&#xff01;&#xff01; 整数在内存中的存储 回忆知识&#xff1a;在讲操作符的那章节中&#xff0c;对于整数而言咱们讲过原码&#xff0c;反码和补码。整数分为有…...

【mysql面试题】mysql复习之常见面试题(一)

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…...

VB.NET中如何利用ASP.NET进行Web开发

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

vue2+js项目升级vue3项目流程

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

做EDM邮件群发营销时如何跟进外贸客户?

跟进外贸客户是外贸业务中至关重要的一环&#xff0c;需要耐心和策略。以下是一些建议&#xff0c;帮助你有效跟进外贸客户&#xff1a; 充分了解产品&#xff1a; 深入了解自己的产品&#xff0c;包括品质、价格竞争力、适用市场等。 只有对产品有充分的了解&#xff0c;才…...

【Java经典游戏】-01-是男人就坚持30秒

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

微调框QSpinBox

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

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行&#xff1a; rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...