网站首页 > 基础教程 正文
typescript编译时,当我们开启严格模式时,下面的代码就会报错:
function doSomething(x: string | null) {
console.log("Hello, " + x.toUpperCase());
}
编译错误:
hello.ts:56:29 - error TS2531: Object is possibly 'null'.
56 console.log("Hello, " + x.toUpperCase());
当我们在调用变量x的方法时,增加后缀!和?时,这个编译错误都会消失:
x!.toUpperCase()
x?.toUpperCase()
那这两者到底有什么区别呢?
后缀是?
function doSomething(x: string | null) {
console.log("Hello, " + x?.toUpperCase());
}
doSomething(null);
输出是:
Hello, undefined
后缀是!
function doSomething(x: string | null) {
console.log("Hello, " + x!.toUpperCase());
}
doSomething(null);
输出是:
Uncaught TypeError TypeError: Cannot read properties of null (reading 'toUpperCase')
结论:
- 后缀是!,只是告诉typescript编译器对于null和undefined不做显示的检查,生成的js文件中还是x.toUpperCase(),如果此时x为null,那么就会出现运行时异常
- 后缀是?,代表是一个空判断,只有非空是,才会执行x.toUpperCase(),生成的js文件中是增加了null或者undefined判断的,生成的js是(x === null || x === void 0 ? void 0 : x.toUpperCase())
猜你喜欢
- 2024-10-12 菜鸟面试:(Object和String)时间类和日期类以及包装类等而谈
- 2024-10-12 做前端不得不会的纯js验证码,你知道吗?
- 2024-10-12 js——prototype 属性 js object.prototype
- 2024-10-12 2024 年 5 个令人兴奋的 JavaScript 新功能
- 2024-10-12 JavaScript 基本数据类型和引用类型的区别详解
- 2024-10-12 「JS 口袋书」第 1 和 2 章:JS简介及基础
- 2024-10-12 第15节 Javascript引用类型-Web前端开发-零点程序员-王唯
- 2024-10-12 javascript系统学习(五)万物皆对象
- 2024-10-12 讲解一下JavaScript基本类型和引用类型的值
- 2024-10-12 JavaScript 原型扩展——对象(Object)
- 最近发表
-
- 1G内存如何对40亿QQ号去重?(qq内存50g)
- Python的os模块:操作系统交互的得力助手
- 引爆你的效率!深入探索 Python os 模块那些不为人知的高阶玩法
- python 进阶突破——内置模块(Standard Library)
- 10行Python代码实现智能文件整理(python整理文件到指定文件夹)
- Python办公自动化系列篇之六:文件系统与操作系统任务
- Windows如何批量修改文件后缀名(电脑如何批量修改文件后缀名)
- Python常用内置模块介绍——文件与系统操作详解
- 每天一个Python库:标准库 os 模块,玩转文件和目录操作!
- Python目录与文件操作教程(python编程目录)
- 标签列表
-
- 菜鸟教程 (58)
- jsp (69)
- pythonlist (60)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- pythonif (68)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)