2011-08-19 11 views
6

JavaScriptのinキーワードの意味を理解できないようです。"in"キーワードを使用したJavaScript配列の反復

は、このコードスニペット(http://jsfiddle.net/3LPZq/)を見ている:jsfiddleで実行する場合

var x = [1,2] 
for(i in x){ 
    document.write(x[i]); 
} 

を、それが配列に含まれる値が、また、配列オブジェクトのプロパティとメソッドのすべてではないだけを印刷します。

$(document).ready(function(){ 
var x = [1,2] 
for(i in x){ 
    document.write(x[i]); 
}}); 

それが唯一の値1と

2.このエラーが発生する理由を出力します。私はこの(http://jsfiddle.net/4abmt/)のようにそれを変更

?これはjQueryによって引き起こされるのですか、またはinキーワードの動作は、ドキュメントが完全に読み込まれているかどうかによって異なりますか?

+1

最初の例では、ライブラリとしてMootoolsを選択しています(プロトタイプを拡張しているようです)。ライブラリを選択しないと、結果はhttp://jsfiddle.net/fkling/3LPZq/6/になります。しかし、配列を反復処理するために 'for ... in'を使うことは悪い習慣であることに注意してください。 –

答えて

2

jsFiddleによって読み込まれたライブラリの中には、Arrayのデフォルトのプロトタイプが拡張されているため、これらの余分な機能が示されています。 jQueryはArrayプロトタイプを拡張しないため、余分な機能はありません。

+0

ありがとう!それは私の質問に答えます。 –

3

これはプロトタイプの継承のために発生します。オブジェクトは自身のプロパティを表示するだけでなく、そのすべての祖先プロパティも表示します。

オブジェクトのプロパティのみを検索するには、obj.hasOwnProperty(prop)を使用します。

var x = [1,2]; 
for (var i in x) { 
    if (x.hasOwnProperty(i)) { 
     document.write(x[i]); 
    } 
} 

hasOwnPropertyのMDNドキュメントを参照してください。

+0

私はそれを得るが、なぜ2番目の例では1と2しか表示せず、他のArrayプロパティも表示しないのはなぜですか? –

+0

+1、確かにオブジェクトを正しく反復する方法。 – Exelian

関連する問題