CoffeeScriptを使用してオブジェクトにキーが存在するかどうかを確認する最も簡単な方法


110

CoffeeScriptで、キーがオブジェクトに存在するかどうかを確認する最も簡単な方法は何ですか?

回答:


182
key of obj

これはJavaScriptにコンパイルされますkey in obj。(CoffeeScriptはof、キーを参照するとき、およびin配列値を参照するときに使用します。val in arrがにあるかどうかをテストvalarrます。)

オブジェクトのプロトタイプを無視する場合は、jhの答えが正しいです。nullor undefined値を持つキーを無視したい場合、ジミーの答えは正しいです。


2
own key of obj追加でテストすることも可能です.hasOwnProperty()。「最も可能性が高い」は、私が試したことがないからですが、この構文は理解力で機能します。
空飛ぶ羊

2
@flyingsheepいいえ、理解している場合にのみ機能します。試す:coffeescript.org/#try
Trevor Burnham

ああ、わかりましたown = (prop, obj) -> Object::hasOwnProperty.call obj, prop
空飛ぶ羊

36

「?」オペレーターは存在をチェックします:

if obj?
    # object is not undefined or null

if obj.key?
    # obj.key is not undefined or null

# call function if it exists
obj.funcKey?()

# chain existence checks, returns undefined if failure at any level
grandChildVal = obj.key?.childKey?.grandChildKey

# chain existence checks with function, returns undefined if failure at any level
grandChildVal = obj.key?.childKey?().grandChildKey

16
キーは存在するが値がの場合、これは失敗しますnull
muが短すぎる

存在するキーは気にしないがnullである場合obj.key?は、おそらく最も簡潔です。
Andrew Mao

21
obj.hasOwnProperty(name)

(継承されたプロパティを無視するため)


key of obj値が文字列または数値の場合にエラーがスローされるため、この応答が好きです。Cannot use 'in' operator to search。この場合、オブジェクトが未定義でなく、nullでもない場合は機能します。
jqualls 2014年

これは、オブジェクトがそのプロトタイプの値を持つ場合は失敗します。
ブライアンM.ハント
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.