【发布时间】:2021-11-20 13:42:13
【问题描述】:
我很惊讶在 Node 14.18.0 中看到以下行为:
> {}?.fun();
Uncaught TypeError: b?.fun is not a function
> undefined?.fun();
undefined
我明白为什么第一条语句会抛出 TypeError。 {}?.fun 是 undefined,这是不可调用的。但是undefined?.fun也是undefined,那为什么不扔就可以调用呢? ECMAScript 规范的哪一部分定义了这种行为? ECMAScript 工作组是否说明了为什么它应该以这种方式工作?
【问题讨论】:
-
因为
undefined的可选链接在undefined处停止。由于{}是一个实际对象——没有一个名为fun()的方法——它会爆炸,因为你调用了一个不存在的函数。 -
?.的全部意义在于,当左侧为undefined时,停止遍历对象图。 -
我不确定它是如何不能以这种方式工作的——它没有调用
fun,因为评估在undefined停止。 -
我刚刚假设
?.是左关联的,就像.(即a?.b?.c <-> (a?.b)?.c)一样。没想到是短路了。 -
Short-circuiting evaluation: "当使用表达式的可选链接时,如果左操作数是
null或undefined,则表达式不会被计算。" -> How much research effort is expected of Stack Overflow users?
标签: javascript specifications ecmascript-2020