TS中符号的用法:?、??、 !、 !!

1) ? 的用法

示例:

 const obj = res?.data || {}; // obj是从接口中取到的数据const dataError = obj.a.b;  // 若obj为空,则此时会报错const dataSafe = obj?.a?.b;  // 相当于 const dataSafe = obj && obj.a && obj.a.b  ? obj.a.b : undefined;

? 表示该参数是一个可选参数;
当使用某一个对象中的属性时,若无法确定该对象是否会为空就需要在后面加上一个问号来进行判空处理,表示若不为空时再去访问属性。

2) ?? 的用法

示例:

const foo = str ??   'default';  //  若str 为 null 或 undefined, foo为default

只有当左侧为null或者undefined时,才会返回右侧的数;主要用于设置默认值

2.感叹号的用法
1) ! 的用法— !obj
变量前使用表示取反;
可将变量转为boolean类型: null、undefined、空字符串 取反之后都为true;

2) !! 的用法— !!obj
!! 用于类型判断,在 ! 之后再做取反

const obj = {a: 1,               // !obj['a'] 为false;     !!obj['a']  为true;b: '',                // !obj['b'] 为true;    !!obj['b']  为false;c: 'test',          // !obj['c'] 为false;    !!obj['c']  为true;d: null,            // !obj['d'] 为true;    !!obj['d']  为false;e: undefined,        // !obj['e'] 为true;    !!obj['e']  为false;f: {},                // !obj['f'] 为false;    !!obj['f']  为true;g: { test: 'test'}    // !obj['g'] 为false;    !!obj['g']  为true;h: []                // !obj['h'] 为false;    !!obj['h']  为true;i: 0                // !obj['i'] 为true;    !!obj['h']  为false;
}

3) ! 的用法— obj!

变量后使用表示类型推断排除 null、 undefined,告诉TS此处一定有值

示例1:

const uploadRef = ref<UploadInstance>();
uploadRef.value!.clearFiles(); // 给uploadRef断言

示例2:

function Fun (data: IParams) {const obj = data.name!;  // 变量值可以为空,为空时返回undefined
}

4)  + 的用法

记住:在字符串前面添加 + 号,可以将 string 转化为 number(字符串内容为数字时才有意义)。 

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

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

相关文章

wy的leetcode刷题记录_Day80

wy的leetcode刷题记录_Day80 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a;2024-3-2 前言 目录 wy的leetcode刷题记录_Day80声明前言2368. 受限条件下可到达节点的数目题目介绍思路代码收获 92. 反转链表 II题目介绍思路代码收获 2368…

Redis持久化+Redis内存管理和优化+Redis三大缓存问题

Redis持久化Redis内存管理和优化Redis三大缓存问题一、Redis高可用二、Redis持久化1、RDB持久化1.1 触发条件(1) 手动触发(2) 自动触发(3) 其他自动触发机制 1.2 执行流程1.3 启动时加载 2、AOF持久化2.1 开启AOF2.2 执行流程(1) 命令追加(append)(2) 文件写入(write)和文件同步…

读书笔记-三国演义-荆州争夺

荆州争夺 赤壁之战后&#xff0c;荆州成为蜀汉、曹魏和孙吴三方争夺的焦点。刘备、曹操和孙权相继占据荆州&#xff0c;展开了一系列激烈的军事冲突和政治斗争。 赤壁之战后的荆州争夺是三国时期曹操、刘备和孙权之间的一场激烈竞争&#xff0c;是继赤壁之战后三方势力之间的…

网络编程笔记

网络编程 1.网络编程常用工具 1.扫描器 每一个网络编程者手中都有一两个用得顺手的扫描器&#xff0c;扫描器在一个老练的网络编程者手里有着相当大的作用。利用扫描器&#xff0c;网络编程者可以对某一网段的机器或是某台目标机器进行快速漏洞扫描&#xff0c;因为传统的手…

langchain学习笔记(十)

Bind runtime args | &#x1f99c;️&#x1f517; Langchain 1、有时&#xff0c;我们希望使用常量参数调用Runnable序列中的Runnable&#xff0c;这些参数不是序列中前一个Runnable的输出的一部分&#xff0c;也不是用户的输入&#xff0c;这时可以用Runnable.bind() from …

关于synchronized介绍

synchronized的特性 1. 乐观锁/悲观锁自适应,开始时是乐观锁,如果锁冲突频繁,就转换为悲观锁 2.轻量级/重量级锁自适应 开始是轻量级锁实现,如果锁被持有的时间较长,就转换成重量级锁 3.自旋/挂起等待锁自适应 4.不是读写锁 5.非公平锁 6,可重入锁 synchronized的使用 1&#…

2024家用洗地机品牌推荐!洗地机选什么牌子好?建议选择这几款

如今生活节奏加快&#xff0c;工作繁忙的上班族很少有时间做家务。即使抽出时间打扫&#xff0c;也难以保持家庭长久干净整洁。许多人听说了智能化家居神器——洗地机&#xff0c;想要入手一台。但在市场上各种洗地机层出不穷&#xff0c;很多人不知如何选择。下面是我给大家整…

掌握MyBatis:轻松解锁数据库操作的艺术

MyBatis是一款优秀的持久层框架&#xff0c;它封装了JDBC操作的很多繁琐细节&#xff0c;提供了一种相对简便的操作数据库的方法。MyBatis通过XML描述接口绑定的SQL语句&#xff0c;以及通过Java注解的方式&#xff0c;将Java对象与数据库表进行映射&#xff0c;从而简化了数据…

降低85%的gc发生率:ES的GC调优实践!

#大数据/ES #经验 #性能 ES的服务日志出现一些gc overhead现象&#xff0c;经过调优对比&#xff0c;gc发生率显著下降了85%&#xff0c;分享参数如下&#xff1a; ES的G1GC参数&#xff08;多实例&#xff09; -XX:UseG1GC -XX:MaxGCPauseMillis200 -XX:InitiatingHeapOccu…

Redis缓存双写一致性之更新策略

文章目录 1. 经典面试题2. 双写一致性3. 更新策略4. canal简介5. Redis与Mysql数据双写一致性工程落地案例 1. 经典面试题 上面的业务逻辑你用java代码如何实现&#xff1f;你只要用缓存&#xff0c;就可能会涉及到redis缓存与数据库双存储双写&#xff0c;你只要是双写&#x…

嵌入式学习day29 指针复习

1.指针&#xff1a; 1.提供一种间接访问数据的方法 2.空间没有名字,只有一个地址编号 2.指针: 1.地址:区分不同内存空间的编号 2.指针:指针就是地址,地址就是指针 3.指针变量:存放指针的变量称为指针变量,简称为指针 3.指针的定义: int *p NULL; …

MyBatis中 #{} 和 ${} 区别

Mybatis的Mapper映射文件中&#xff0c;有两种方式可以引用形参变量进行取值: #{} 和 ${}。本文将简述两种方式的区别和适用场景 取值引用 #{} 方式 #{}: 解析为SQL时&#xff0c;会将形参变量的值取出&#xff0c;并自动给其添加引号。 例如&#xff1a;当实参username&quo…

AI 笔记助手,你的思路整理助手

大家好&#xff0c;今天给大家介绍一款非常实用的 AI 笔记助手——AI Note。这款助手就像是一个贴心的小助手&#xff0c;能帮助我们整理笔记&#xff0c;提高学习和工作效率。 &#x1f916; AI Note 可以智能总结笔记内容&#xff0c;准确标记重点&#xff0c;让我们更快地获…

final关键字有什么作用

final关键字在Java中用于声明变量、方法和类&#xff0c;表示它们的值或行为不能被修改。 被 final 修饰的类不可以被继承 被 final 修饰的方法不可以被重写 被 final 修饰的变量不可变&#xff0c;被 final 修饰的变量必须被显式第指定初始值&#xff0c;还得注意的是&#…

学习助手:借助AI大模型,学习更高效!

在当今的数字时代&#xff0c;人工智能&#xff08;AI&#xff09;的崛起已经彻底改变了我们获取信息、处理数据以及学习新知识的方式。AI大模型&#xff0c;特别是如OpenAI开发的GPT-4这类先进的技术&#xff0c;已成为学习和教育领域的一大助力。本文旨在探索如何借助AI大模型…

了解 SYN Flood 攻击

文章目录&#xff1a; 什么是 SYN Flood 攻击&#xff1f;对网络的影响SYN Flood 发生的迹象如何解决&#xff1f; 什么是 SYN Flood 攻击&#xff1f; SYN Flood&#xff08;SYN 洪水攻击&#xff09;是一种常见的分布式拒绝服务&#xff08;DDoS - Distributed Denial of Se…

购买腾讯云服务器请先领取代金券,2024腾讯云优惠

腾讯云优惠代金券领取入口共三个渠道&#xff0c;腾讯云新用户和老用户均可领取8888元代金券&#xff0c;可用于云服务器等产品购买、续费和升级使用&#xff0c;阿腾云atengyun.com整理腾讯云优惠券&#xff08;代金券&#xff09;领取入口、代金券查询、优惠券兑换码使用方法…

FL Studio选购指南:新手小白应该选择哪个版本FL Studio?

很多打算入手正版FL Studio的新手朋友都会纠结一个问题&#xff1a;哪个版本的FL Studio更适合我&#xff0c;到底应该入手哪一款FL Studio&#xff1f;本文会介绍每个版本之间的差异点&#xff0c;并带大家选择适合自己的FL Sudio版本。 FL Studio全版本 在选购前有一些小知识…

UE5常见问题处理笔记

一、C工程中的文件出现很多头文件找不到&#xff0c;比如&#xff1a;#include CoreMinimal.h文件提示找不到。 解决方法&#xff1a;在UE编辑器中选择菜单Tools -> Refresh Visual Studio Project。 二、莫名其妙的编译错误。 解决方法&#xff0c;找到工程根目录下的Bi…

GO流程控制

1. if else 在Go语言中&#xff0c;关键字if是用于测试某个条件&#xff08;布尔型或逻辑型&#xff09;的语句&#xff0c;如果该条件成立&#xff0c;则会执行 if 后由大括号{}括起来的代码块&#xff0c;否则就忽略该代码块继续执行后续的代码。 if condition {// 条件为真…