2

检查是否定义了简单变量很容易myVar?

问题是,CoffeeScript 中是否有一种很好的方法来检查是否定义了嵌套属性?

例如

if property.p.p.p.p?
  alert "Hello"

抛出一个ReferenceErrorif property.p.p.p(或property.p.p| property.p)未定义。

这只是我们必须递归检查的东西,还是有一个不错的功能?

4

1 回答 1

12
if property?.p?.p?.p?.p?
  alert "Hello"

做你想做的。

这转化为

var _ref, _ref1, _ref2;

if ((typeof property !== "undefined" && property !== null ? (_ref = property.p) != null ? (_ref1 = _ref.p) != null ? (_ref2 = _ref1.p) != null ? _ref2.p : void 0 : void 0 : void 0 : void 0) != null) {
  alert("Hello");
}

在 JS 中。

文档的相关部分:

存在运算符 ? 的访问器变体。可用于吸收属性链中的空引用。使用它代替点存取器。在基值可能为空或未定义的情况下。如果所有属性都存在,那么您将获得预期的结果,如果链被破坏,则返回 undefined 而不是否则将引发的 TypeError 。

于 2013-08-19T03:37:29.827 回答