问题描述
try {
let n = undefined;
let nx = n?.x;
} catch (err) {
missingFeatures.push("Syntax n?.x not recognized");
}
如您所见,该代码的设计旨在获得对这种语法的支持。 但这是行不通的。有什么办法可以捕获此语法错误?
有趣的是,这发生在Android 10上基于铬的新Edge中。
解决方法
您可以改为构造一个new Function
,并查看该函数的构造是否抛出。不需要先定义其他变量,因为您只关心语法是否正确,而语法检查则不在乎变量是否已定义,因为该函数永远不会运行:
try {
const fn = new Function('n?.x');
} catch (err) {
missingFeatures.push("Syntax n?.x not recognized");
}
也就是说,测试是否支持特定语法是很奇怪的。除非您为用户编写面向开发的内容(例如实时JavaScript编辑器),否则将代码简单地转换为ES5或ES6进行生产并将其提供给每个人几乎总是更有意义。