2012-04-29 35 views
3

申し訳ありませんが、これは簡単なことかもしれませんが、私は困惑しています。この配列をループして各値をログアウトしようとしていますが、スクリプトは文字列オブジェクトをログアウトしています。配列.each()ループがjQueryの値の代わりに文字列を返す

var propertiesToSanitize; 
propertiesToSanitize = ["title", "description", "place_name"]; 
$.each(propertiesToSanitize, function() { 
    return console.log(this); 
}); 

としてのjQueryに変換し

propertiesToSanitize = ["title", "description", "place_name"] 
$.each propertiesToSanitize, -> 
    console.log this 

戻っている:

String 
    0: "t" 
    1: "i" 
    2: "t" 
    3: "l" 
    4: "e" 
    length: 5 

任意のアイデアを、それは、このだけでなく、 "タイトル"、または他の値を返しますなぜですか?助けを前にありがとう。

+0

あなただけ行う場合は 'にconsole.log + "") 'または' console.log(this.toString()) 'を呼び出すと、期待している文字列プリミティブが返されます。 –

答えて

8

各反復のインデックスと値は、コールバックのパラメータとして提供されます。

$.each(propertiesToSanitize, function(index,value) { 
    console.log(index + ':' + value); 
}); 
+0

それはトリックをしたようだ!そのドキュメンテーションは実際にはどこにも見つかりませんでした。助けてくれてありがとう、仲間。 – createbang

+1

@ mlp.brooklyn実際には、[それについてのドキュメントがあります](http://api.jquery.com/jQuery.each/) – Joseph

2

理由は、thisがJavaScriptで非常に複雑であるためです。コールバック内の変数thisは、しばしば依存してはならないスコープスタックの深いものを参照します。 jQuery's eachでは、「JavaScriptは、の値をObjectとして、単純な文字列または数値の値であっても、常にラップします」という表示になります。

jQueryのeachは、コールバックに2番目の引数として値を渡します。あなたのJavaScriptでは、あなたはおそらく、この望む:

$.each(propertiesToSanitize, function(idx, val) { 
    return console.log(idx + ":" + val); 
}); 

しかし、ノートものCoffeeScriptはjQueryの助けを借りずに、配列をループするのは非常に可能である:(この

for propName in propertiesToSanitize 
    console.log propName 
+0

'this'は反復の各項目の値に依存することができます'$ .each()'問題は、非strictモードでは、文字列がプリミティブの代わりにStringオブジェクトラッパーとして提供されることです。 –

+1

が更新されました。ありがとう@ amnotiam。 – dkamins

+0

+1は、より良いcoffeescriptのバージョンを表示します。 – loganfsmyth

関連する問題