2017-08-10 4 views
1

私は、forループAJAXのバージョンが他のものと同じように数字を出力しないことに気付きます。それはなぜですか? The number version linkajaxのforループの.length使用とnumber出力の.length使用の違いは何ですか?

とAJAXバージョン。

INPUT

<!DOCTYPE html> 
<html> 
<body> 

<div id="demo"> 
<button id="bg" type="button" onclick="x()">Change Content</button> 
</div> 

<script> 
function x() { 

var xhr = new XMLHttpRequest(); 
xhr.onreadystatechange = function() { 
if (xhr.readyState == 4) { 
var employees = JSON.parse(xhr.responseText); 
document.getElementById("demo").innerHTML = ""; 
for(var i=0;i<employees.length;i++){ 
    employee = employees[i]; 
    document.getElementById("demo").innerHTML += '<br>' + employee.name; 
} 
} 
}; 
xhr.open("GET", "burgerking.json", true); 
xhr.send(); 
} 
</script> 

</body> 
</html> 

OUTPUT

スティーブ ダン ケン

+1

length属性は常に数値を返します。あなたの 'for'ループでは、あなたが作成した' employees'変数の長さを返します。より一般的には、反復可能なオブジェクトの長さに達するまでループするために、forループの長さ属性が使用されます。 – Sventies

+1

*名前の長さ*対*名前の数*。 – Rajesh

+0

だから私はあなたが正しく理解している場合は、ループ内で使用されている.lengthは、各プロパティのすべての文字を生成する責任がありますか?例えばスティーブ、ダン、ケン?そして、他の非ループ版は文字を数えるために使われますか?例えばスティーブ= 5? –

答えて

0

それは、String.lengthですJavaScriptでArray.lengthとの差に帰着します。

共有するリンクは、string.length JavaScriptの文字列のプロパティの例です。
lengthプロパティは文字列の長さを表します。
構文str.length
戻り文字列の文字数が

var x = 'Mozilla'; 
var empty = ''; 

console.log('Mozilla is ' + x.length + ' code units long'); 
/* "Mozilla is 7 characters long" */ 

console.log('The empty string has a length of ' + empty.length); 
/* "The empty string has a length of 0" */ 

一方、一度にemployees配列に一つの要素にアクセスしようとしている上記のコードサンプルでは、​​employees.lengthが提供するトータルなしの従業員OR配列内の要素の総数:

長さタイプAのインスタンスであるオブジェクトのプロパティrrayは配列内の要素の数を設定または返す。コードで

var items = ['shoes', 'shirts', 'socks', 'sweaters']; 
items.length; 

// returns 4 

は、あなたが上記の共有スニペット:あなたは、配列を反復している

for(var i=0;i<employees.length;i++){ 
    employee = employees[i]; 
    document.getElementById("demo").innerHTML += '<br>' + employee.name; 
} 

、あなたが書くとき:

for(var i=0;i<employees.length;i++) 

これはあなたがiまでループ未満employees.lengthであることを意味します
employees.length返信a 番号は上記の共有の例のようです。

ループ実行ブロックの内部にいったん入れば、配列の特定の要素にアクセスするには、iを使用します。インデックス番号を参照して配列要素を参照します。このように:

従業員は、あなたがA返す従業員変数の名前プロパティにアクセス従業員配列

employee = employees[i]; 

I番目の要素を保持する変数でありますテキスト出力

employee.name // returns John 

はまた、JavaScriptでStringは文字のシーケンスであることに注意することが重要です。言い換えれば、文字の配列。

希望すると便利です。

+0

あなたの応答に感謝しますが、配列と文字列のバージョンを再生した後、それでも出力として数値が得られます。出力としてカウントバックを返しますが、私に数値的な返答を返しましたが、代わりにそれが人々の名前を与えました、あなたはそれを説明できますか?それは私が混乱していることです。 –

+0

上記のあなたのコメントに対する私の答えを編集しました! – Winnie

関連する問題