当前位置: 首页 > 知识库问答 >
问题:

为什么TypeScript编译器用两个检查来编译其可选的链接和空合并运算符?

祁默
2023-03-14
// x?.y
x === null || x === void 0 ? void 0 : x.y;

// x ?? y
x !== null && x !== void 0 ? x : y
// x?.y
x == null ? void 0 : x.y

// x ?? y
x != null ? x : y

顺便说一句,我还感到惊讶的是,可选链接不能编译

x == null ? x : x.y

若要保留nullundefined

共有1个答案

欧阳衡
2023-03-14

你可以在Microsoft/Typescript#16中找到权威的答案(哇,一个旧的);在本评论中特别说明:

这是因为document.all[...],这种怪癖在语言中得到了向后兼容性的特殊处理。

document.all == null // true
document.all === null || document.all === undefined // false

在可选链接建议中

document.all?.foo === document.all.foo
 类似资料:
  • 我尝试使用功能,如可选链接、空合并。但是在传输时给了我一个错误。

  • 主要内容:编译(Compile),链接(Link),总结我们平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为 可执行程序(Executable Program)。在 Windows 下,可执行程序的后缀有 和 (其中 比较常见);在类 UNIX 系统(Linux、Mac OS 等)下,可执行程序没有特定的后缀,系统根据文件的头部信息来判断是否是可执行程序。 可执行程序的内部是一系列计算机指令和数据的集合,它们都是二进制形式的,CPU 可

  • TypeScript 提供了很多不同功能的编译选项,既可以通过配置 tsconfig.json 文件中的 compilerOptions 属性来实现编译,也可以使用在 tsc 命令后跟随参数这形式,直接编译 .ts 文件。 注意: 当命令行上指定了输入文件时,tsconfig.json 文件会被忽略。 1. 慕课解释 我们通过编译选项 --watch 为例,在当前目录创建 main.ts 文件,写

  • 如果变量是易变的,那么显然没有任何优化是适用的。在我的情况下是什么阻止了它? 下面是编译器资源管理器中的代码。

  • 主要内容:什么是编译器,什么是集成开发环境,选择哪种集成开发环境我们平时所说的程序,是指双击后就可以直接运行的程序,这样的程序被称为 可执行程序(Executable Program)。在 Windows 下,可执行程序的后缀有 .exe 和 .com(其中 .exe 比较常见);在类 UNIX 系统(Linux、Mac OS 等)下,可执行程序没有特定的后缀,系统根据文件的头部信息来判断是否是可执行程序。 可执行程序的内部是一系列计算机指令和数据的集合,它们

  • 问题内容: 我从camlistore(http://code.google.com/p/camlistore/source/browse/pkg/cacher/cacher.go)中看到以下语句。 我知道不会创建任何变量,并且这些语句可确保编译器检查CachingFether是否实现StreamingFetcher和SeekFetcher的公共功能。RHS部分使用带有nil参数的指针构造函数语法。