17

Javascript では、「for (attr in this)」を使用するのはしばしば危険です... 私は同意します。それが、私が Coffeescript を気に入っている理由の 1 つです。ただし、私はCoffeescriptでプログラミングしており、Javascriptの「for (attr in this)」が必要な場合があります。Coffeescriptでこれを行う良い方法はありますか?

私が今行っているのは、次のような埋め込みの生の Javascript で一連のロジックを作成することです。

...coffeescript here...
for (attr in this) {
  if (stuff here) {
    etc
  }
}

できるだけ少ない Javascript を使用するとよいでしょう...これを達成し、Coffeescript を最大限に活用する方法について何か提案はありますか?

4

3 に答える 3

17

for item in items配列を反復処理する代わりに、JSfor attr, value of objectのように機能する を使用できます。for in

for own attr, value of this
  if attr == 'foo' && value == 'bar'
    console.log 'Found a foobar!'

コンパイル済み: https://gist.github.com/62860f0c07d60320151c

ループ内でキーと値の両方を受け入れるので、非常に便利です。ownまた、キーワードを の直後に挿入して、プロトタイプから不要なものを除外するチェックをfor強制することもできます。if object.hasOwnProperty(attr)

于 2011-04-22T16:59:14.363 に答える
6

Squeegyの答えは正しいです。for...inJavaScriptが (プロトタイプ プロパティを含めることによって) "危険"である場合の通常の解決策は、チェックを追加することであると付け加えて、修正させてhasOwnPropertyください。CoffeeScript は、特別なownキーワードを使用してこれを自動的に行うことができます。

for own attr of this
  ...

JavaScript と同等です

for (attr in this) {
  if (!Object.prototype.hasOwnProperty(this, attr)) continue;
  ...
}

for...ofまたはを使用するかどうかについて疑問がある場合はfor own...of、一般に を使用する方が安全ownです。

于 2011-04-22T17:41:32.667 に答える
2

要素のリストを解釈する方法に応じて、for x in yまたはを使用できます。CoffeeScript の最新バージョンは、この問題を解決することを目的としています。その新しい使用法については、GitHub でfor x of y(その後実装されてクローズされた) イシューで読むことができます。

于 2011-04-22T03:48:07.453 に答える