配列はforEach文が使用可能である。
しかし、配列ではなくオブジェクトの場合、forEach文は使用不可能である。
こんな時は、object.key()を使ってオブジェクトのキー(プロパティ名)の配列を通常のループで取得するのと同じ順序で得ることができる。
つまりobject.key().forEach()とする。
すべての関数は実行されるときにthisとargumentsを受け取る。
argumentsはlengthプロパティが存在するためオブジェクトと思いきや、argumentsは配列に似たオブジェクトである。このためargumentsにはforEach文が使用不可能である。
配列の要素を取り出すfor文をforEach文に書き換えをしていると、argumentsの値を取り出すfor文をforEach文に書き換えができなかった。
調べると、argumentsはオブジェクトでありforEach文を使用不可能だった。
「argumentsの値を取り出す」の言い方は正しいのか?よく分からん。
var sum = function() {
var i, sum = 0;
console.log("Array.isArray(arguments) = " + Array.isArray(arguments));
console.log("Array.isArray(Object.keys(arguments)) = " + Array.isArray(Object.keys(arguments)));
Object.keys(arguments).forEach((key) => {
console.log('forEach文 key: ' + key);
console.log("forEach文 arguments[" + key + "] = " + arguments[key]);
});
for (i = 0; i < arguments.length; i += 1) {
sum += arguments[i];
console.log("for文 arguments[" + i + "] = " + arguments[i]);
}
return sum;
};
console.log(sum(4, 8, 15, 16, 23, 42));//108
/*
Array.isArray(arguments) = false
Array.isArray(Object.keys(arguments)) = true
forEach文 key: 0
forEach文 arguments[0] = 4
forEach文 key: 1
forEach文 arguments[1] = 8
forEach文 key: 2
forEach文 arguments[2] = 15
forEach文 key: 3
forEach文 arguments[3] = 16
forEach文 key: 4
forEach文 arguments[4] = 23
forEach文 key: 5
forEach文 arguments[5] = 42
for文 arguments[0] = 4
for文 arguments[1] = 8
for文 arguments[2] = 15
for文 arguments[3] = 16
for文 arguments[4] = 23
for文 arguments[5] = 42
108
*/
【JS】オブジェクト(連想配列)に対しforEachでループ処理をかける方法 | プログラマーになった 「中卒」 男のブログ (chusotsu-program.com) ExternalLink
JavaScript:the good parts 「良いパーツ」によるベストプラクティス [ ダグラス・クロフォード ] ExternalLink P36