#Ts篇:符号`?.` 、`??` 、 `!` 、 `?: `的用法和区别

这篇具有很好参考价值的文章主要介绍了#Ts篇:符号`?.` 、`??` 、 `!` 、 `?: `的用法和区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

?.

  • 定义
    可选属性操作符
    例如:obj?.prop。
    如果 obj = null || undefined ====> undefined,
interface Person {
  name: string;
  age?: number;
}
const person1: Person = { name: 'Alice', age: 20 };
const person2: Person = { name: 'Bob' };
console.log(person1.age); // 20
console.log(person2.age); // undefined
console.log(person1.job?.title); // undefined
console.log(person2.job?.title); // undefined

在上面的示例中,
person1.age 和 person2.age 都可能为 undefined,
因为 age 属性是可选的。
而在访问 job.title 属性时,我们使用了可选属性访问操作符 ?.
如果 person1.job 或 person2.job 为 null 或 undefined,
那么整个表达式的值就是 undefined。
需要注意的是,可选属性访问操作符 ?. 只能用于访问属性,不能用于调用方法。

??

  • 定义
    空值合并操作符
  • 作用
    这个操作符可以用于判断一个变量是否为 null 或 undefined,
    如果是,
    则返回一个默认值,
    否则返回该变量的值。
  • 返回
    可以将两个表达式用??连接起来,
    例如:a ?? b。
    这样,
    如果 a 为 null 或 undefined,
    那么整个表达式的值就是 b,
    否则表达式的值就是 a。
    示例:
const a = null;
const b = 10;
const c = a ?? b;
console.log(c); // 10

在上面的示例中,
a 的值为 null,
因此 c 的值为 b,即 10。
需要注意的是,空值合并操作符 ?? 仅判断变量是否为 null 或 undefined,
对于其他假值(例如 0、‘’、false 等),仍然会被视为真值。
如果需要判断其他假值,
可以使用逻辑或操作符 ||:

const a = '';
const b = 'default';
const c = a || b;
console.log(c); // 'default'

在上面的示例中,
由于 a 的值为 ‘’,被视为假值,
因此表达式 a || b 的值为 b,即 ‘default’。

!

  • 定义
    非空断言操作符
  • 作用
    这个操作符可以用于断言一个变量
    一定
    不为 null 或 undefined,
    从而避免出现类型错误。
function printLength(str?: string) {
  console.log(str!.length); // 断言 str 一定不为 null 或 undefined
}
printLength('hello'); // 输出 5
printLength(); // 抛出 TypeError 异常

在上面的示例中,
printLength 函数接受一个可选的字符串参数 str,
如果 str 不为 null 或 undefined,
则输出其长度,否则会抛出 TypeError 异常。
由于使用了非空断言操作符 !,因此在访问 str.length 时不会出现编译错误。
需要注意的是,
非空断言操作符 ! 可能会隐藏潜在的错误,因此应该谨慎使用。
如果不能确定一个变量或属性是否为 null 或 undefined,
最好使用安全访问操作符 ?. 或 nullish 合并操作符 ?? 来进行判断,从而避免出现运行时异常。

?:

  • 定义
    条件运算符
  • 作用
    这个操作符可以用于根据一个条件来返回不同的值。
  • 返回
	interface Person {   
		name: string;   
		age?: number; 
	} 
	let p1: Person = { name: 'Tom' }; 
	// age是可选属性 let p2: Person = { name: 'Jerry', age: 20 }; // age是可选属性

在上面的示例中,
我们定义了一个 Person 接口,
它有两个属性 name 和 age。
其中 age 属性使用 ?: 定义为可选属性。
在使用时,我们可以不传入 age 属性,
或者传入一个数字类型的 age 属性。文章来源地址https://www.toymoban.com/news/detail-474922.html

到了这里,关于#Ts篇:符号`?.` 、`??` 、 `!` 、 `?: `的用法和区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • TypeScript中的对象类型(可选属性 只读属性 交叉类型)

    一、定义对象类型 在TypeScript中定义对象类型有以下三种方式: 1. 匿名对象类型 匿名对象类型是在定义变量时直接使用花括号{},来定义一个对象类型。例如: 上述代码中定义了一个person变量,它的类型为对象,它有两个属性:name和age,其中name属性的类型为字符串,age属性

    2024年02月11日
    浏览(49)
  • Typescript - 通俗易懂的 interface 接口,创建接口 / 基础使用 / 可选属性 / 只读属性 / 任意属性(详细教程)

    在面向对象语言中,接口是一个很重要的概念,它是对行为的抽象,而具体如何行动需要由类去实现。 TypeScript 中的接口是一个非常灵活的概念,除了可用于 对类的一部分行为进行抽象 以外,也常用于对「对象的形状(Shape)」进行描述。 ​TypeScript 的核心原则之一是对值所

    2023年04月15日
    浏览(50)
  • 【Vue-Element UI】三级表单可选框以及显示、修改和删除表单属性

    目录 三级表单可选框 静态界面 收集数据  获取数据 属性值内容显示  一些知识点 (1)Vue.nextTick() (2)$set (3) ref (4)一些数组方法 (5)深拷贝 (6)@blur 效果: 这里是后台管理系统的三级选择器, 只有当第一级分类选中属性时,第二个才能选,以此类推 。 Element 

    2023年04月08日
    浏览(47)
  • 【Linux 】getopts 可选参数_Bash技巧:介绍 getopts 内置命令解析选项参数的用法

    在 Linux bash shell 中,内置了一个 getopts 命令,可以处理以 ‘-’ 开头的选项参数。本篇文章通过多个实例详解 getopts 命令的用法。 getopts 命令简介 在 bash shell 上执行命令,常常会用到一些选项参数来指定不同的操作。例如 ls 命令的 -l、-a 选项等。 我们在编写 shell 脚本时,也

    2024年02月07日
    浏览(38)
  • Python教程:@符号的用法

    @ 符号在 Python 中最常见的使用情况是在装饰器中。一个装饰器可以让你改变一个函数或类的行为。 @ 符号也可以作为一个数学运算符使用,因为它可以在Python中乘以矩阵。本教程将教你如何使用 Python 的@ 符号。 装饰器是一个接受一个函数作为参数的函数,向其添加一些功能

    2024年02月08日
    浏览(37)
  • C语言笔记 - “%”符号的用法

    %表示取模运算,也就是取余数。 例如 6 % 4 = 2 引导符用于控制输入输出的格式。常见于printf(\\\"%d\\\",a);scanf(\\\"%d\\\",a);语句。 %s-字符串(String) %c-字符(Char) %d-十进制有符号型输出(Decimal) ① %6d 整数输出,宽度是6位,不足左边补空格 ② %06d 整数输出,宽度是6位,不足左边补数字0 ③ %

    2024年02月12日
    浏览(33)
  • 【Web3 系列开发教程——创建你的第一个 NFT(7)】创建一个 NFT DApp,给你的 NFT 赋予属性,例如图片

    在本文中,你将构建一个 NFT 铸币机,并学习如何通过使用 Metamask 和 Web3 工具将你的智能合约连接到 React 前端,来创建一个NFT dApp。 我认为,对于具备 Web2 开发背景的开发者来说,最大的挑战之一是 弄清楚如何将你的智能合约连接到前端项目并与之交互。 通过构建 NFT 铸币

    2024年01月16日
    浏览(67)
  • 结构体的三种定义方法、结构体类型名(可选标志符)什么时候可以省略

    一、单独定义:   先定义结构体类型,再定义变量   定义结构体的格式如下:    struct 结构体名 {    若干数据项;    } ;   其中,struct为; 结构体名是用户定义的类型标识。 { }中是组成该结构体的成员。成员的数据类型可以是C语言所允许的任何数据

    2024年02月05日
    浏览(51)
  • PyTorch中的符号索引和函数索引用法

    Pytorch中很多函数都采用的是函数式索引的思路,而且使用函数式索引对代码可读性会有很大提升。 张量也是有序序列,我们可以根据每个元素在系统内的顺序位置,来找出特定的元素,也就是索引。 一维张量的索引 一维张量索引与Python中的索引一样是是从左到右,从0开始

    2024年02月01日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包