5

console.log() は、JavaScript で呼び出されたときに変数の値を出力することになっていますか? それは私の仮定でしたが、Firefox (Firebug を使用) または Google Chrome (および組み込みの開発ツールを使用) で以下のコードを実行すると、配列の値ではなく、配列の「最終的な」値を取得するようです。当時の配列。alert() ステートメントを使用すると、予想される内容 (alert() ステートメントが呼び出された時点での配列の値) が出力されます。

var params = new Array();
var tmp = new Array('apple', 'banana', 'cat');

for (var i=0; i < tmp.length; i++) {
    params[tmp[i]] = [];
}

console.log(params);
/*
SHOWS IN CONSOLE:

- []
+ apple             ["jan", "feb", "mar", "apr"]
+ banana            ["jan", "feb", "mar", "apr"]
+ apple             ["jan", "feb", "mar", "apr"]
*/

alert( print_arr(params) );
/* 
ALERT BOX TEXT:

[apple]:
[banana]:
[cat]:
*/

console.log('===========================================');

var tmp2 = new Array('jan', 'feb', 'mar', 'apr');
for (var i=0; i < tmp.length; i++) {
    for (var j=0; j < tmp2.length; j++) {
        params[tmp[i]].push(tmp2[j]);
    }
}           

console.log(params);
/*
SHOWS IN CONSOLE:

- []
+ apple             ["jan", "feb", "mar", "apr"]
+ banana            ["jan", "feb", "mar", "apr"]
+ apple             ["jan", "feb", "mar", "apr"]
*/

alert( print_arr(params) );
/* 
ALERT BOX TEXT:

[apple]:jan,feb,mar,apr
[banana]:jan,feb,mar,apr
[cat]:jan,feb,mar,apr
*/

function print_arr(arr) {
    var str = '';
    for (var k in arr) {
        str += '[' + k + ']:' + arr[k].toString() + "\n";

    }

    return str;
}
4

1 に答える 1

8

コメントで述べたようにconsole.log(obj)、文字列表現はログに記録されず、メモリ内の実際の JavaScript オブジェクトへの参照がログに記録されます。したがって、オブジェクトに加えられた変更は、ログに記録されたインスタンスに反映されます。

行われた漸進的な変更を追跡したい場合は、オブジェクトを文字列に変換し、 like に出力しconsole.log(JSON.stringify(params))ます。

またparams、配列として使用しているのではなく、マップとして使用しています。paramsオブジェクトに変更var params = {}

paramsオブジェクトに変更し、JSON.stringifyそれをログに記録するために使用します

var params = {};
var tmp = new Array('apple', 'banana', 'cat');

for (var i=0; i < tmp.length; i++) {
    params[tmp[i]] = [];
}

console.log(JSON.stringify(params));
/*
SHOWS IN CONSOLE:

- []
+ apple             ["jan", "feb", "mar", "apr"]
+ banana            ["jan", "feb", "mar", "apr"]
+ apple             ["jan", "feb", "mar", "apr"]
*/

alert( print_arr(params) );
/* 
ALERT BOX TEXT:

[apple]:
[banana]:
[cat]:
*/

console.log('===========================================');

var tmp2 = new Array('jan', 'feb', 'mar', 'apr');
for (var i=0; i < tmp.length; i++) {
    for (var j=0; j < tmp2.length; j++) {
        params[tmp[i]].push(tmp2[j]);
    }
}           

console.log(JSON.stringify(params));
/*
SHOWS IN CONSOLE:

- []
+ apple             ["jan", "feb", "mar", "apr"]
+ banana            ["jan", "feb", "mar", "apr"]
+ apple             ["jan", "feb", "mar", "apr"]
*/

alert( print_arr(params) );
/* 
ALERT BOX TEXT:

[apple]:jan,feb,mar,apr
[banana]:jan,feb,mar,apr
[cat]:jan,feb,mar,apr
*/

function print_arr(arr) {
    var str = '';
    for (var k in arr) {
        str += '[' + k + ']:' + arr[k].toString() + "\n";

    }

    return str;
}

デモ:フィドル

于 2013-03-20T15:57:08.230 に答える