for..in文

広告

既にfor文の使い方については解説をいたしましましたが、for文には別のfor..in文という使い方があります。書式は次の通りです。

for (変数名 in オブジェクト)
  実行する文;
for (変数名 in オブジェクト){
  実行する文1;
  実行する文2;
  ...
}

for..in文は特別な使い方をする文で、オブジェクトに含まれるプロパティを順に取り出す時に使用します。

オブジェクトについてここでは詳しく解説しませんが、オブジェクトはプロパティと呼ばれるものをまとめて管理するためのものです。プロパティは名前と値を組み合わせたもので値に名前を付けて管理するためのものと考えて下さい。つまりオブジェクトは名前が付いた複数の値を管理しています。

for文やwhile文などの繰り返し処理では、条件式を使って繰り返しを継続するかどうかを判断していましたが、for..in文ではオブジェクトに含まれるプロパティの数だけ繰り返しを行います。その為条件式や変化式といったものは不要です。

では簡単な例を使いどのように動作するのかを確認します。まず対象となるオブジェクトを作成します。

var obj = {name:'Yamada', old:24};

このオブジェクトには2つのプロパティが含まれています。1つ目のプロパティは名前が「name」で値が「'Yamada'」です。2つ目のプロパティは名前が「old」で値が「24」です。

このオブジェクトのプロパティを順に取り出してみます。

var obj = {name:'Yamada', old:24};

for(var pname in obj){
  alert(obj[pname]);
}

for..in文は繰り返しが一度行われるとオブジェクトに含まれるどれか1つのプロパティの名前を取り出します。そして変数名に指定した変数に代入します。ここで変数名には変数の他にvar文を記述して使用する変数を宣言することもできます。

変数に代入されたプロパティの名前をどのように使用するのかは自由ですが、先ほどのサンプルではプロパティの名前を使ってプロパテイの値を取り出しています。このようにfor..in文を使えばオブジェクトにいくつのプロパティが含まれているのかを意識せずに全てのプロパティを順に取り出し処理する時に便利な構文です。

注意すべき点としてどのような順番でプロパティが取り出されるのかは決まっていませんし指定することもできないという点です。例えば先ほどのサンプルで言えば、1回目に「name」が取り出されるのか「old」が取り出されるのかは分かりません。ただ2回目は1回目で取り出されなかった残りのプロパティが取り出されます。

サンプルコード

では簡単なサンプルで試してみます。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>JavaScript テスト</title>
</head>
<body>

<script type="text/javascript" src="./js/script8_1.js">
</script>

</body>
</html>
var personal = {
  name:'加藤',
  old:28,
  address:'東京都',
  email:'katou@example.com'
}

document.write("<p>");

for(var pname in personal){
  document.write(pname + " : " + personal[pname] + "<br />");
}

document.write("</p>");

上記を実際にブラウザ見てみると次のように表示されます。

p8-1

( Written by Tatsuo Ikura )