TypeScript 支持的常见运算符

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


1. 算术运算符

  • + 加法运算符
  • - 减法运算符
  • * 乘法运算符
  • / 除法运算符
  • % 取余运算符
  • ++ 自增运算符
  • -- 自减运算符
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. 赋值运算符

  • = 简单赋值运算符
  • += 加法赋值运算符
  • -= 减法赋值运算符
  • *= 乘法赋值运算符
  • /= 除法赋值运算符
  • %= 取余赋值运算符
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. 比较运算符

  • == 等于运算符
  • === 全等运算符(类型和值都相等)
  • != 不等于运算符
  • !== 不全等运算符(类型或值不相等)
  • > 大于运算符
  • < 小于运算符
  • >= 大于等于运算符
  • <= 小于等于运算符
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. 逻辑运算符

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

5. 位运算符

  • & 按位与运算符
  • | 按位或运算符
  • ^ 按位异或运算符
  • ~ 按位取反运算符
  • << 左移运算符
  • >> 右移运算符
  • >>> 无符号右移运算符
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
let age = 18;
let result = age >= 18 ? "Adult" : "Minor";
console.log(result);  // "Adult"

7. 类型运算符

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

8. 空值合并运算符

  • ?? 如果左侧为 nullundefined,返回右侧的值
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 表达式不返回值
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. 解构赋值运算符

  • 用于解构对象或数组
// 解构数组
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. 交叉类型运算符(&

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

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

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

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

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

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.rhkb.cn/news/465709.html

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

相关文章

python-docx -- 读取word图片

文章目录 概念介绍形状对象读取图片自定义图形 概念介绍 从概念上来讲&#xff0c;word文档分为两层&#xff0c;一个文本层&#xff0c;一个绘画层&#xff1b; 文本层&#xff0c;从上到下&#xff0c;从左到右&#xff0c;流式排版&#xff0c;本页填满则开启新页面&#…

Python数据可视化seaborn

产品经理在做数据分析时可能需要通过可视化来分析。seaborn官网 1. relplot 散点图 https://seaborn.pydata.org/examples/scatterplot_sizes.html import pandas as pd import seaborn as sns df pd.DataFrame({x: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],y: [8, 6, 7, 8, 4, 6,…

释放专利力量:Patently 如何利用向量搜索和 NLP 简化协作

作者&#xff1a;来自 Elastic Matt Scourfield, Andrew Crothers, Brian Lambert 组织依靠知识产权 (IP) 来推动创新、保持竞争优势并创造收入来源。对于希望将新产品推向市场的公司来说&#xff0c;弄清楚谁拥有哪些专利是一项必不可少的能力。搜索数百万项专利可能既困难又耗…

协议栈攻击分类(CISP-PTE笔记)

CISP-PTE笔记 协议栈攻击分类 1.协议栈自身的脆弱性 ​ 1&#xff09;缺乏数据源验证机制 ​ 2&#xff09;缺乏完整性验证机制 ​ 3&#xff09;缺乏机密性验证机制 2.网络接口层攻击 3.网络层攻击 4.应用层攻击 网络攻击的基本模式 被动威胁&#xff08;不影响通信双…

SpringBoot3集成Junit5

目录 1. 确保项目中包含相关依赖2. 配置JUnit 53. 编写测试类4、Junit5 新增特性4.1 注解4.2 断言4.3 嵌套测试4.4 总结 在Spring Boot 3中集成JUnit 5的步骤相对简单。以下是你可以按照的步骤&#xff1a; 1. 确保项目中包含相关依赖 首先&#xff0c;确保你的pom.xml文件中…

智慧城市智慧城市项目方案-大数据平台建设技术方案(原件Word)

第1章 总体说明 1.1 建设背景 1.2 建设目标 1.3 项目建设主要内容 1.4 设计原则 第2章 对项目的理解 2.1 现状分析 2.2 业务需求分析 2.3 功能需求分析 第3章 大数据平台建设方案 3.1 大数据平台总体设计 3.2 大数据平台功能设计 3.3 平台应用 第4章 政策标准保障…

算法练习:904. 水果成篮

题目链接&#xff1a;904. 水果成篮。 题目意思就是可以选取两个种类的水果不能超过两个种类&#xff0c;该种类个数没有限制&#xff0c; 但是一旦超过两个种类的水果就要停止计数。 示例中数组编号就是就是种类&#xff0c;就是不能出现三个不同编号的数。 1.暴力解法&…

wincc中全局脚本C(c语言脚本)的研究和解密

文章目录 前言一、分析 前言 很多时候我们在wincc中写全局脚本时会为自己的脚本添加密码&#xff0c;但很久很久以后再想修改密码忘记了怎么办呢。 一、分析 经过分析编码有了下面成功 ![请添加图片描述](https://i-blog.csdnimg.cn/direct/33baf91a49da410e82f16b4fbd746c48…

Java+控制台 商城销售系统

Java控制台 商城销售系统 一、系统介绍二、功能展示1.系统登陆2.二维数组实现商城销售系统3.类集实现商城销售系统 四、其它1.其他系统实现 一、系统介绍 实现一个xx商城销售系统的登录功能: 1)&#xff09;打开系统&#xff0c;给出欢迎信息。 2&#xff09;将用户名和密码定…

微服务中常用分布式锁原理及执行流程

1.什么是分布式锁 分布式锁是一种在分布式系统环境下实现的锁机制&#xff0c;它主要用于解决&#xff0c;多个分布式节点之间对共享资源的互斥访问问题&#xff0c;确保在分布式系统中&#xff0c;即使存在有多个不同节点上的进程或线程&#xff0c;同一时刻也只有一个节点可…

A15基于Spring Boot的宠物爱心组织管理系统的设计与实现

&#x1f64a;作者简介&#xff1a;在校研究生&#xff0c;拥有计算机专业的研究生开发团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339; 赠送计算机毕业设计600…

测试自动化如何和业务流程结合?

测试自动化框架固然重要&#xff0c;但是最终自动化的目的都是为了业务服务的。 那测试自动化如何对业务流程产生积极影响&#xff1f; 业务流程的重要性 测试自动化项目并非孤立存在&#xff0c;其生命周期与被测试的应用程序紧密相关。项目的价值在于被整个开发团队所使用&a…

AI - 使用LangChain请求LLM结构化生成内容

AI - 使用LangChain请求LLM结构化生成内容 基于深度学习的大型语言模型&#xff08;LLM&#xff09;不仅可以生成文本&#xff0c;还可以帮助我们完成许多复杂任务&#xff0c;如自动化客服、内容创作和数据分析。然而&#xff0c;如何从这些模型中结构化地获取输出&#xff0c…

使用GPT-SoVITS训练语音模型

1.项目演示 阅读单句话 1725352713141 读古诗 1725353700203 2.项目环境 开发环境&#xff1a;linux 机器配置如下&#xff1a;实际使用率百分之二十几&#xff0c; 3.开发步骤 1.首先是准备数据集&#xff0c;要求是wav格式&#xff0c;一到两个小时即可&#xff0c; 2.…

UML的另一个主角——用例图

顺序图和类图已经出过单集&#xff0c;本贴要分享的是用例图。 类图https://blog.csdn.net/jsl123x/article/details/143526286?spm1001.2014.3001.5501顺序图https://jslhyh32.blog.csdn.net/article/details/134350587 目录 一.系统 二.参与者 1.主要参与者 2.次要参与…

set和map的使用

目录 1.关联式容器 2.键值对 3.set 3.1set的模版参数列表 3.2对set的修改 3.2.1insert 3.2.2 erase 3.2.3clear 3.2.4swap 3.2.5 find 3.3set的迭代器 3.4set的容量 4.map 4.1对map的修改 4.1.1insert 4.1.2erase 4.1.3swap 4.1.4clear 4.2map的迭代器 4.3opera…

【5.10】指针算法-快慢指针将有序链表转二叉搜索树

一、题目 给定一个单链表&#xff0c;其中的 元素按升序排序 &#xff0c;将其转换为 高度平衡的二叉搜索树 。 本题中&#xff0c;一个高度平衡二叉树是指一个二叉树每个节点的左右两个子树的高度差的绝对值不超过 1。 示例: 给定的有序链表&#xff1a; [ -10 , -3 , 0 , …

dns服务器配置

主服务器 1.挂载点 mount /dev/sr0 /mnt 2.防火墙关闭 systemctl stop firewalld setenforce 0 3.下载bind软件 dnf install bind -y 4.进行正向解析配置 vim /etc/named.conf options { listen-on port 53 { 192.168.92.128; }; directo…

stable diffusion图生图

本节内容&#xff0c;给大家带来的是stable diffusion的图生图课程&#xff0c;我们在midjourney的课程中有学习过midjourney的图生图功能&#xff0c;即使用垫图的方式来引导AI绘制图片。图生图是AI绘图程序一个非常重要的功能&#xff0c;stable diffusion同样提供了类似的功…

论文阅读笔记:DRCT: Saving Image Super-Resolution away from Information Bottleneck

论文阅读笔记&#xff1a;DRCT: Saving Image Super-Resolution away from Information Bottleneck 1 背景1.1 问题1.2 本文提出的方法 2 创新点3 方法4 模块4.1 问题描述4.2 深度特征提取模块4.3 同任务渐进式训练策略 5 效果5.1 和SOTA方法对比 论文&#xff1a;https://arxi…