检查是否定义了简单变量很容易myVar?
问题是,CoffeeScript 中是否有一种很好的方法来检查是否定义了嵌套属性?
例如
if property.p.p.p.p?
alert "Hello"
抛出一个ReferenceError
if property.p.p.p
(或property.p.p
| property.p
)未定义。
这只是我们必须递归检查的东西,还是有一个不错的功能?
检查是否定义了简单变量很容易myVar?
问题是,CoffeeScript 中是否有一种很好的方法来检查是否定义了嵌套属性?
例如
if property.p.p.p.p?
alert "Hello"
抛出一个ReferenceError
if property.p.p.p
(或property.p.p
| property.p
)未定义。
这只是我们必须递归检查的东西,还是有一个不错的功能?
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 。