【JavaScript】forEachとarguments

  • このエントリーをはてなブックマークに追加

配列は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

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*