2

在 Node 14.18.0 中看到以下行为,我感到非常惊讶:

> {}?.fun();
Uncaught TypeError: b?.fun is not a function
> undefined?.fun();
undefined

我明白为什么第一条语句会引发 TypeError。{}?.funis undefined,这是不可调用的。但是undefined?.funis 也是undefined,那为什么不抛出就可以调用呢?ECMAScript 规范的哪一部分定义了这种行为?ECMAScript 工作组是否提供了为什么它应该以这种方式工作的任何理由?

4

2 回答 2

3

在可选链接期间,如果链中的当前值为nullundefined,则表达式短路,返回值为undefined

这是在官方文档中:

?.运算符类似于链接运算符,不同之处在于如果引用是(或).则不会导致错误,而是表达式短路并返回值. 与函数调用一起使用时,如果给定函数不存在,则返回。nullishnullundefinedundefinedundefined

因为{}是一个实际的对象——没有调用方法fun()——它会爆炸,因为你调用了一个不存在的函数。

要解决您的问题,您需要使用可选链接调用该函数:

console.log(({})?.fun?.()); // undefined

于 2021-09-28T14:09:46.413 回答
-5

的工作?并说可能该值未定义

通常在打字稿中这样使用

console.log(myobj?.value ?? 'does not exist');

在javascript中“?” 没用的

“?” 不做任何事情,它只是表示该值可以是未定义的,因此当您放置一个对象时,它会返回一个错误,因为您的对象中不存在此属性,而在未定义的 javascript 中它只是忽略所有内容

于 2021-09-28T14:08:55.887 回答