使用JavaScript或CoffeeScript,可以轻松测试以下内容:
if (locals.messages.text === "somestring") { ... }
现在这需要三件事情:locals
需要存在,locals.messages
需要存在且需要等于"somestring"
。
如果locals.messages
不存在,则会抛出TypeEror cannot read text of undefined
我知道我可以这样做:
if (!!locals && !!locals.messages && locals.messages.text == "somestring) {...}
但这太长了,无论如何都要:
locals.messages.text
使用javascript或coffeescript
答案 0 :(得分:6)
在CoffeeScript中,您可以使用“存在运算符”的存取变体,大致:
locals?.messages?.text == 'somestring'
这编译为(为了清晰起见而分解,但实际上不再可读):
(typeof locals !== "undefined" && locals !== null
? (_ref = locals.messages) != null
? _ref.text
: void 0
: void 0)
=== 'somestring'
存在运算符
?.
的访问器变体可用于在属性链中吸收空引用。在基值可能为null或未定义的情况下,使用它代替点访问器.
。如果所有属性都存在,那么你将获得预期的结果,如果链断开,则返回undefined而不是否则会引发TypeError。
不确定它是否符合您的精确要求,但这可能就足够了。