TypeScript 支持的常见运算符

embedded/2024/11/9 2:26:27/

下面是对 TypeScript 支持的常见运算符的汇总,包括 算术运算符赋值运算符比较运算符 等内容,另外补充了 !!! 运算符的用法。


1. 算术运算符

  • + 加法运算符
  • - 减法运算符
  • * 乘法运算符
  • / 除法运算符
  • % 取余运算符
  • ++ 自增运算符
  • -- 自减运算符
typescript">let a = 10, b = 5;console.log(a + b);  // 15
console.log(a - b);  // 5
console.log(a * b);  // 50
console.log(a / b);  // 2
console.log(a % b);  // 0
console.log(++a);    // 11
console.log(--b);    // 4

2. 赋值运算符

  • = 简单赋值运算符
  • += 加法赋值运算符
  • -= 减法赋值运算符
  • *= 乘法赋值运算符
  • /= 除法赋值运算符
  • %= 取余赋值运算符
typescript">let x = 10;
x += 5;  // x = x + 5 -> x = 15
x -= 3;  // x = x - 3 -> x = 12
x *= 2;  // x = x * 2 -> x = 24
x /= 4;  // x = x / 4 -> x = 6
x %= 4;  // x = x % 4 -> x = 2
console.log(x);  // 2

3. 比较运算符

  • == 等于运算符
  • === 全等运算符(类型和值都相等)
  • != 不等于运算符
  • !== 不全等运算符(类型或值不相等)
  • > 大于运算符
  • < 小于运算符
  • >= 大于等于运算符
  • <= 小于等于运算符
typescript">let a = 10, b = 20;console.log(a == b);  // false
console.log(a === 10);  // true
console.log(a != b);  // true
console.log(a !== "10");  // true
console.log(a > b);  // false
console.log(a < b);  // true
console.log(a >= 10);  // true
console.log(a <= 10);  // true

4. 逻辑运算符

  • && 与运算符
  • || 或运算符
  • ! 非运算符
typescript">let a = true, b = false;console.log(a && b);  // false
console.log(a || b);  // true
console.log(!a);      // false

5. 位运算符

  • & 按位与运算符
  • | 按位或运算符
  • ^ 按位异或运算符
  • ~ 按位取反运算符
  • << 左移运算符
  • >> 右移运算符
  • >>> 无符号右移运算符
typescript">let x = 5, y = 3;  // 5 = 0101, 3 = 0011console.log(x & y);   // 1 (0001)
console.log(x | y);   // 7 (0111)
console.log(x ^ y);   // 6 (0110)
console.log(~x);      // -6 (~0101 = 1010)
console.log(x << 1);  // 10 (1010)
console.log(x >> 1);  // 2 (0010)
console.log(x >>> 1); // 2 (0010)

6. 条件(三元)运算符

  • condition ? expr1 : expr2 如果条件为真,返回 expr1,否则返回 expr2
typescript">let age = 18;
let result = age >= 18 ? "Adult" : "Minor";
console.log(result);  // "Adult"

7. 类型运算符

  • typeof 获取变量的类型
  • instanceof 判断对象是否为某个类的实例
typescript">let name = "John";
console.log(typeof name);  // "string"let obj = new Date();
console.log(obj instanceof Date);  // true

8. 空值合并运算符

  • ?? 如果左侧为 nullundefined,返回右侧的值
typescript">let x = null;
let y = 10;
console.log(x ?? y);  // 10let z = undefined;
console.log(z ?? y);  // 10let w = 0;
console.log(w ?? y);  // 0

9. 其他运算符

  • in 判断对象是否包含某个属性
  • delete 删除对象的属性
  • void 表达式不返回值
typescript">let person = { name: "Alice", age: 25 };console.log("name" in person);  // true
console.log("address" in person);  // falsedelete person.age;
console.log(person);  // { name: "Alice" }let a = void 0;  // a = undefined
console.log(a);  // undefined

10. 解构赋值运算符

  • 用于解构对象或数组
typescript">// 解构数组
let [x, y] = [1, 2];
console.log(x);  // 1
console.log(y);  // 2// 解构对象
let { name, age } = { name: "John", age: 30 };
console.log(name);  // "John"
console.log(age);   // 30

11. 交叉类型运算符(&

交叉类型运算符 & 用于合并多个类型(即交叉类型)。它将多个类型的成员合并成一个新类型,要求这个新类型包含所有成员。

typescript">interface Person {name: string;age: number;
}interface Contact {email: string;phone: string;
}type PersonWithContact = Person & Contact;const john: PersonWithContact = {name: "John",age: 30,email: "john@example.com",phone: "123-456-7890"
};console.log(john);

12. !(非运算符)

在 TypeScript 中,! 既是 逻辑非 运算符(用于反转布尔值),也可以作为 非空断言 运算符,用于告诉 TypeScript 编译器某个值不会是 nullundefined

示例:
typescript">let user: { name: string } | null = { name: "Alice" };// 使用非空断言(!)
console.log(user!.name);  // "Alice"

13. !!(双重非运算符)

!! 是两次 逻辑非 运算符,常用于将任意值转换为布尔值。它将值转换为 truefalse

typescript">let a = 1;    // true
let b = 0;    // false
let c = "";   // false
let d = "abc"; // trueconsole.log(!!a);  // true
console.log(!!b);  // false
console.log(!!c);  // false
console.log(!!d);  // true

总结:

TypeScript 支持多种运算符,包括常见的算术、赋值、比较、逻辑运算符等。此外,它也支持交叉类型运算符 &,以及用于类型断言和布尔值转换的 !!! 运算符。在开发过程中,熟练使用这些运算符可以提高代码的灵活性和可读性。


http://www.ppmy.cn/embedded/136052.html

相关文章

从零开始搭建Halo个人博客

前言 老话说得好&#xff0c;好记性不如烂笔头。对于程序员来说&#xff0c;学无止境&#xff0c;需要学习的东西很多&#xff0c;而如果不记录下来可能过不了多久就忘记了&#xff0c;而记录下来这一步也能很好地贯彻费曼学习法。 其实网上有很多博客平台&#xff0c;但是自…

梧桐数据库SQL分析对比之订单最多的客户

一、背景说明 在特定的业务场景&#xff0c;许多业务部门需要推送业务订单最多的客户。需要编写一个解决方案&#xff0c;找出业务订单最多的客户。 本次以三种不同数据库进行分析和用例讲解&#xff0c;分别是梧桐数据库&#xff0c;mysql &#xff0c;oracle 。 二、表结构…

HFSS 3D Layout中Design setting各个选项的解释

从HFSS 3D LAYOUT菜单中&#xff0c;选择Design Settings打开窗口&#xff0c;会有六个选项&#xff1a;DC Extrapolation, Nexxim Options, Export S Parameters, Lossy Dielectrics, HFSS Meshing Method, and HFSS Adaptive Mesh. DC Extrapolation 直流外推 直流外推分为标…

计算机网络——IP协议

ICMP Traceroute upper layer表示上层用户标识——TCP还是UDP IP数据报格式的校验和主要检测头部是否出错 Options会将源主机到目标主机所经过的路由器和交换机进行记录 IP地址 同一个子网下&#xff0c;前缀相同 子网间的收发一跳可达&#xff0c;不用借助路由器&#xff0c;可…

7.0、RIP

RIP (Routing Information Protocol) 简介 RIP是由Xerox在20世纪70年代开发的&#xff0c;最初定义在RFC1058中。RIP用两种数据包传输更新:更新和请求&#xff0c;每个有RIP功能的路由器在默认情况下&#xff0c;每隔30s利用UDP520端口向与它直连的网络邻居广播(RIP1)或组播(R…

Springboot项目报错记录

SpringBoot测试报错&#xff1a;Unable to find a SpringBootConfiguration, you need to use Context 该测试类所在测试包test下的包名和类路径java下的包名不一致导致的 引发以下报错 java.lang.IllegalStateException: Unable to find a SpringBootConfiguration, you need…

智能提醒助理系列-jdk8升级到21,springboot2.3升级到3.3

本系列文章记录“智能提醒助理”产品建设历程&#xff0c;记录实践经验、巩固知识点、锻炼总结能力。 本篇介绍技术栈升级的过程&#xff0c;遇到的问题和解决方案。 一、需求出发点 智能提醒小程序 当前使用的是jdk8&#xff0c;springboot2.3,升级到jdk21和springboot3.3 学…

【k8s】-Pod镜像拉取失败问题

创建镜像仓库secrets kubectl -n kube-system create secret docker-registry harbor-secret \--docker-username=admin --docker-password=test \--docker-server=registry.bcbx.com下述两种方式二选一即可前置准备需要安装上述的方式进行创建镜像仓库通过kubectl进行更新 #…