在if语句中测试是否存在和正确的值

时间:2013-05-22 21:31:38

标签: javascript if-statement coffeescript operators

使用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) {...}

但这太长了,无论如何都要:

  1. locals.messages.text
  2. 存在的文字
  3. 检查值是否等于某个值?
  4. 使用javascript或coffeescript

1 个答案:

答案 0 :(得分:6)

在CoffeeScript中,您可以使用“存在运算符”的存取变体,大致:

locals?.messages?.text == 'somestring'

http://coffeescript.org/

这编译为(为了清晰起见而分解,但实际上不再可读):

(typeof locals !== "undefined" && locals !== null 
    ? (_ref = locals.messages) != null 
        ? _ref.text 
        : void 0 
    : void 0)
    === 'somestring'
  

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

不确定它是否符合您的精确要求,但这可能就足够了。