?.(可选链操作符)是TypeScript或JavaScript中的合法运算符吗?
可选链操作符异常报错问题说明
你提到的const var1 = obj1?.innerObj1?.somePropVal;属于ES2020新增的可选链操作符语法,正常运行场景下如果obj1为undefined,表达式会直接返回undefined,不会抛出错误。如果你运行时出现报错,通常是以下几类原因导致:
- Chrome版本过低:可选链操作符在Chrome 80版本才正式纳入支持范围,低于该版本的Chrome无法识别该语法,会直接抛出语法错误。你可以在地址栏输入
chrome://version查看当前浏览器版本确认是否符合要求。 - 变量未提前声明:如果
obj1是完全未声明的变量,而非已声明但值为undefined的变量,运行时会抛出ReferenceError: obj1 is not defined报错,这属于JS变量未声明的常规报错,和可选链语法本身无关。 - 编译环境未配置转译规则:如果这段代码是在项目中经过babel等编译工具打包后运行,需要确认编译配置已经开启了ES2020语法的转译支持,未配置的情况下也会出现语法解析错误。
你可以直接在控制台运行以下测试代码验证当前环境的可选链支持情况:
const obj1 = undefined; const testVal = obj1?.innerObj1?.somePropVal; console.log(testVal); // 支持可选链的环境下会输出undefined,无报错
内容的提问来源于stack exchange,提问作者cethie
相关产品推荐
相关产品推荐

