问题标签 [optional-chaining]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
446 浏览

javascript - JS 中 Array.find 的可选链接

在 JavaScript 中,是否可以在 Array.find 上执行类似于可选链的操作?即,就像在下面的(不正确的)示例中一样?

我尝试了上面的语法,但它抛出了一个错误,我想知道是否有一些简洁的单行方法来实现这一点,而不必声明另一个变量来存储 Array.find 结果并在你可以之前检查它是否真实设定值 = 50。

0 投票
1 回答
269 浏览

typescript - 使用可选链接时,“对象”类型上不存在属性

这段代码不可能失败

但是 TypeScript 编译器阻止我写那个,解释说

“对象”类型上不存在属性“道具”

但这正是可选链的使用:如果属性存在,我访问它,否则我访问 undefined,它适用于任何object. 那么为什么 TS 不让我写这个,tsconfig.json我可以设置一个设置,以便我可以写那个?

0 投票
0 回答
22 浏览

swift - 为什么 Swift 5 的 safeAreaInserts 可选链在 window??.safeAreaInsets 中需要两个问号而不是一个问号?

Swift 编译器抱怨

let insets : UIEdgeInsets? = UIApplication.shared.delegate?.window?.safeAreaInsets

带有错误消息

Value of optional type UIWindow? must be unwrapped to refer to member safeAreaInsets of wrapped base type UIWIndow. Chain the optional using '?' to access member safeAreaInsets only for non-nil base values.

编码

let insets : UIEdgeInsets? = UIApplication.shared.delegate?.window??.safeAreaInsets

工作正常。为什么必填后的第二个问号window?这里的两个问号似乎不构成 nil-coalescing 运算符。我显然错过了一些东西。

0 投票
1 回答
82 浏览

java - 测试 Optional.map() 时的 Mockito 错误?

这是我的实现:

和测试:

测试失败,结果如下:

从来不想在这里:-> 在 ServiceTest.fetchGetsDataFromHolidayClient(ServiceTest.java:57) 但在这里调用:-> 在 Service.fetch(Service.java:39)

Calendar 是我的 POJO,它不是 java.util.Calendar!我使用了 Oracle JK 8、Junit5。这是mockito的错误吗?

0 投票
0 回答
554 浏览

javascript - 在 Node 14/Vue2.js 中使用可选链接语法时出错(意外令牌)

可选链接不适用于我在 Node 14.17 上的 Vue.js (v2) 项目。

我收到以下错误:

我有一种预感,它可能与以下其中一项有关。我也安装了 Babel 7,但也许项目仍然使用 6,因为 Babel 模块名称显然已更改。但我不知道如何检查,或者如何将其切换到 7,即使可以在不破坏 Vue 项目的情况下完成——也许与此无关。

我也尝试添加plugins: ["@babel/plugin-proposal-optional-chaining"],到 babel.config.js

我也尝试卸载 babel 6,但 npm 卸载程序无法真正卸载它。

可能有类似的根本原因(不幸的是未解决): 可选链接在 Node 14 LTS 中不起作用?

0 投票
1 回答
74 浏览

lodash - 将 lodash javascript 库的 get 转换为可选链接

我想将这段使用 lodash 库中的 get 方法的代码更改为可选的链接方法。有人可以帮我转换一下吗

0 投票
1 回答
41 浏览

javascript - ?. 在打字稿中?

?。Typescript 或 Javascript 中的有效运算符?

我看过如下代码:

当我在 chrome 控制台中尝试此操作时,如果 obj1 未定义,我会收到错误消息。不确定这种代码是否可行。

如果我遗漏了什么,请告诉我。

0 投票
2 回答
326 浏览

javascript - 当没有方法的返回值时,为什么 javaScript 的可选链接语法不适用于 Nullish Coalescing Operator?

我正在尝试新的 JavaScript 可选链接语法,它似乎与没有返回值的方法有问题。例如:

我有一个带有 order 方法的餐厅对象:

现在,如果我尝试检查以下餐厅对象中是否存在 order 方法,它会返回“undefiend”:

现在的问题是,如果我将上述情况与 Nullish Coalescing Operator 一起使用,如下所示,它不起作用:

ISSUE:现在上述语句中的问题是,可选的链接语法甚至可以找到 order 方法并打印“I was here with 0 and 1”但仍然返回“undefiend”,这使得 Nullish Coalescing Operator 继续进行,甚至打印“Method does不存在'也作为默认值?

现在,如果我允许 order 方法返回一个值,那么它可以与 Nullish Coalescing Operator 一起正常工作并且它不会继续。

如果再次检查:

可选链接语法是否有必要从方法中期望返回值而不是空值以检查其可用性?

在上述情况下,order 方法确实存在,那么如何防止 Nullish Coalescing Operator 不继续默认的“方法不存在”?

我正在使用现代浏览器(Chrome 和 firfox)对其进行测试,并且我还在 Chrome 中启用了 javaScript 实验性功能,但它仍然以上述方式工作。

有什么想法会有所帮助吗?谢谢

0 投票
1 回答
84 浏览

javascript - 对带有可选链接的元素进行空检查

使用可选链接进行空检查是否是一种好习惯,如下例所示?

在许多代码库中,我看到了这一点:

我认为链接更清晰,并且在这两种情况下都会发生无声的失败。我知道浏览器支持。

0 投票
1 回答
51 浏览

typescript - 调用可能未定义函数的最短方法

来自 C# 的背景,空条件运算符允许您调用函数以避免可能的空引用异常,如下所示:

鉴于 Typescript 具有.?功能非常相似的“可选链接运算符”,我想知道是否有办法用同样简洁的代码来做同样的事情。我能想到的最好的方法是使用条件表达式:

也许可以以某种方式使用applycall ?