JavaScriptの「for each...in」ステートメントとは?構文と非推奨になった理由を解説
JavaScriptには、かつてオブジェクトのプロパティ値を順番に取り出して処理するための「for each...in」というループ構文が存在しました。このループは、指定したオブジェクトが持つすべてのプロパティの値を変数に代入しながら繰り返し処理を実行するものでした。
注意: 「for each...in」は現在非推奨(deprecated)となっており、最新のブラウザでは動作しません。新しいコードでは使用しないでください。代わりに「for...of」文や「forEach()」メソッドなど、標準化された代替手段を使いましょう。
構文
「for each...in」の基本的な構文は以下の通りです。
for each (variablename in object) {
実行するステートメントまたはブロック
}コード例
以下は、オブジェクトのプロパティ値を合計するサンプルコードです。ただし、「for each...in」は非推奨のため、現在のどのWebブラウザでも実行できない点に注意してください。
<!DOCTYPE html>
<html>
<body>
<script>
var myObj = {myProp1:30, myProp2: 40};
var sum = 0;
for each (var value in myObj) {
sum += value;
}
document.write(sum);
</script>
</body>
</html>現代的な代替方法
同じ処理を行う場合、現在では次のような書き方が推奨されます。
1. for...of 文と Object.values() を使う方法
const myObj = {myProp1: 30, myProp2: 40};
let sum = 0;
for (const value of Object.values(myObj)) {
sum += value;
}
console.log(sum); // 702. forEach() メソッドを使う方法
const myObj = {myProp1: 30, myProp2: 40};
let sum = 0;
Object.values(myObj).forEach(value => {
sum += value;
});
console.log(sum); // 70これらの方法はすべてのモダンブラウザで標準的にサポートされており、今後も安心して利用できます。古いコードで「for each...in」を見かけた場合は、上記のいずれかに置き換えることをおすすめします。
-
JavaScriptの「for...in」ステートメントとは?オブジェクトのプロパティをループ処理する方法を解説
JavaScriptのfor...in文は、オブジェクトが持つすべてのプロパティ(列挙可能なプロパティ)を順番に取り出して処理するためのループ構文です。オブジェクト内の各キー(プロパティ名)にアクセスしながら、対応する値を取得したい場合に非常に便利です。for...inの基本的な構文for (let 変数名 in オブジェクト) { // 各プロパティに対して実行したい処理 }ループ変数には、各反復ごとにオブジェクトのプロパティ名(キー)が文字列として代入されます。値そのものを取得するには、「オブジェクト[変数名]」のようにブラケット記法を使ってアクセスします。サンプルコード以下は、for
-
JavaScriptで数列の和を計算する方法
問題次のような級数の和を考えてみましょう。$$seq(n,\:p)=\displaystyle\sum\limits_{k=0}^{n}(-1)^{k}\times\:p\:\times 4^{n-k}\:\times\frac{2n-k}{k}$$この問題では、数値 n と p を引数として受け取り、seq(n, p) の計算結果を返すJavaScript関数を作成することが求められます。この級数は以下の要素で構成されています。(-1)k: kが偶数なら正、奇数なら負となる交互符号p: 固定の係数4n-k: 4の冪乗(2n-k)/k: kに応じて変化する倍率解決策forループを使って k =