我在Chrome控制台上进行了以下实验:
a = {}
-> {}
a.n.n.n.n.n.n.n
-> Uncaught TypeError: Cannot read properties of undefined (reading 'n')
a?.n.n.n.n.n.n.n
-> Uncaught TypeError: Cannot read properties of undefined (reading 'n')
a?.n?.n.n.n.n.n.n
-> undefined
根据我对该操作符的理解,除非所有的"点"都有前面的问号,否则我预计会出现错误:子表达式a?.n?.n
应该导致未定义的结果,而后面的.n
应该崩溃.然而,在做了两次?.n
之后,似乎发生了一些变化,读取未定义的属性n似乎还可以,这显然是胡说八道.因此,可能还有其他事情在发生.
当对未定义的表达式求值时,您可能会认为?.
是整个剩余表达式的捷径,但情况也不是这样,否则单个?.
应该就足以实现这一点.
?.
到底是如何表现的,这种行为如何解释我得到的结果?