2

使用 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. 检查该值是否等于某物?

使用 javascript 或 coffeescript

4

1 回答 1

6

在 CoffeeScript 中,您可以使用“Existential Operator”的访问器变体,大致如下:

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 。

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

于 2013-05-22T21:35:47.220 回答