JavaScript中的安全变量引用

430 阅读1分钟

在编写JavaScript代码时,经常需要首先检查一个变量是否为nullundefined,再访问其中的属性或调用其中的方法。典型的模式如下:

if (obj) { obj.func(); }

使用if进行检查的代码比较冗长,一般可以简写成下面的形式。

let value = obj && obj.value;

obj && obj.func(); 

JavaScript目前并没有提供Groovy或Ruby语言中那样的安全引用操作符(?.)。比较接近的是CoffeeScript中提供了这样的操作符。CoffeeScript中的代码value = a?.b?.c会被编译成如下的JavaScript代码。

var ref, value;

value = typeof a !== "undefined" && a !== null ? (ref = a.b) != null ? ref.c : void 0 : void 0; 

在JavaScript方面,增加安全引用操作符的提议已经存在,目前还是在第一阶段。该提议的名称是JavaScript中的可选级联(Optional Chaining for JavaScript),使用的同样是?.来表示该操作符。该操作符有如下几种使用场景:

  • obj?.prop // 可选的静态属性访问
  • obj?.[expr] // 可选的动态属性访问
  • func?.(...args) // 可选的方法调用

在该提议正式被添加到ECMAScript规范之后,相关的厂商会跟进实现。TypeScript也计划在那之后添加对该操作符的支持。