2

JavaScript または CoffeeScript を使用して、次のことを簡単にテストする方法はありますか?

if (locals.messages.text === "somestring") { ... }

ここで、これが真であるためには、存在する必要がある、存在する必要がある、および に等しい必要があるという 3 つのことが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 参照を吸収できます。.ベース値が null または未定義の可能性がある場合は、ドット アクセサーの代わりに使用します。すべてのプロパティが存在する場合は、期待される結果が得られます。チェーンが壊れている場合は、そうでない場合に発生する TypeError の代わりに undefined が返されます。

正確な要件を満たしているかどうかはわかりませんが、十分かもしれません。

于 2013-05-22T21:35:47.220 に答える