这两行代码有什么不同,一个抛出错误而另一个没有?

console.log("#1", "a12312a".match(/^d+/)?.[0].length);
console.log("#2", ("a12312a".match(/^d+/)?.[0]).length);

回答

.match由于模式不匹配,因此返回 null。所以比较是

null?.[0].length

(null?.[0]).length

这应该使过程更加清晰。使用.?.链,当它们从左到右求值时,如果左边的表达式在任何时候nullundefined,则链将停在那里并将整个事物求值为undefined

但是,如果您通过将其中一个括在括号中来打破链条,您只会在括号内得到一个简单的表达式:

(undefined).length

没有可选链的特殊机制。

可选链接仅沿着属性访问和函数调用的连续序列的函数。中间的任何其他运算符(例如分组括号)都会破坏链。


以上是这两行代码有什么不同,一个抛出错误而另一个没有?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>