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

TypeScript中 ?, ??, !, !! 的使用

1 【?】 属性 或 参数 中使用 ? 表示该属性或参数为【可选项】

他会先判断 name 属性是存在,存在就去访问他的值,不存在就返回undefined

const user = null;
console.log(user.name)   // 以前会报错
//现在,他会先判断 name 属性是存在,存在就去访问他的值,不存在就返回undefined
console.log(user?.name)   

2 【!】属性或参数中使用!表示表示强制解析(告诉typescript编译器,这里一定有值)

?让类属性为可选属性,可以不传,!可以当这个属性不存在时返回undefined而不是报错

interface IDemo {x?: number //该属性是可选,可以不传
}
const demo = (parma: IDemo) => {const y:number = parma.x!  // !可以将 当这个x属性为空将返回undefined而不是报错return y
}
console.log(demo({}))          // 没有传x, 输出: undefined
console.log(demo({x: 3}))      // 输出: 3

3 【||】 或运算符,属性不在就返回右边值,在就返回它自己的值

// 如果为undefined,返回y=1,如果不为undefined,则返回parma.x的值
const y:number = parma.x || 1;
console.log(y); // 输出: 1
const z:number = parma2.x || 1;
console.log(z); // 输出: 3

3 【!!】 表示将把表达式 【强行转换】 为 bool

0为false,非零为true

console.log(!!(0 + 0)) // 输出: false
console.log(!!(3 * 3)) // 输出: true
console.log(!!('aaaa')) // 输出: true
console.log(!!('')) // 输出: false

4 【??】 ??表示只有当左侧为null和undefined时, 才会返回右侧的数

0为false,非零为true

const foo = null ?? 'default string';
console.log(foo); // 输出: "default string"
const foo = undefined ?? 'default string';
console.log(foo); // 输出: "default string"const baz = 0 ?? 42;
console.log(baz); // 输出: 0

下面是?、??、!、!!的基本介绍:
属性或参数中使用?表示该属性或参数为可选项
??表示只有当左侧为null和undefined时, 才会返回右侧的数
属性或参数中使用!表示表示强制解析(告诉typescript编译器,这里一定有值)
变量前使用!表示取反, 变量后使用!表示类型推断排除null、undefined从而使null 和undefined类型可以赋值给其他类型并通过编译
!!表示将把表达式强行转换为逻辑值.

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 6小时之可笑中文乱码bug
  • 面试:MySQL 数据库中的 count(1)、count(*)、count(字段)有什么区别?
  • ssh免密认证配置
  • 解决vue 初始化页面闪动问题
  • c++STL容器中vector的使用,模拟实现及迭代器使用注意事项和迭代器失效问题
  • HTB Driver红队笔记靶机精讲笔记
  • c++中的Stack与Queue
  • 相似度计算方法
  • 前端日历插件VCalendar
  • 实验2-4-7 求平方与倒数序列的部分和
  • 【iOS】iOS内存五大分区
  • pip安装mysqlclient报错
  • The First项目报告:解读Trading Bot黑马,交易狙击手Banana Gun
  • RAG 革命:NVIDIA 工作站如何成为企业 AI 的秘密武器
  • 模型优化—动量梯度下降
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • C语言笔记(第一章:C语言编程)
  • ES6--对象的扩展
  • fetch 从初识到应用
  • go append函数以及写入
  • iOS | NSProxy
  • Linux各目录及每个目录的详细介绍
  • Python学习笔记 字符串拼接
  • sessionStorage和localStorage
  • unity如何实现一个固定宽度的orthagraphic相机
  • 初探 Vue 生命周期和钩子函数
  • 如何胜任知名企业的商业数据分析师?
  • 深入浏览器事件循环的本质
  • 使用API自动生成工具优化前端工作流
  • 手机端车牌号码键盘的vue组件
  • python最赚钱的4个方向,你最心动的是哪个?
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • #define
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (9)STL算法之逆转旋转
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (十)T检验-第一部分
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (一)SpringBoot3---尚硅谷总结
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)关于多人操作数据的处理策略
  • ./configure,make,make install的作用
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .net 7 上传文件踩坑
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .net core 的缓存方案
  • .Net 应用中使用dot trace进行性能诊断
  • .Net插件开发开源框架
  • /var/spool/postfix/maildrop 下有大量文件
  • @hook扩展分析