2013-03-20 107 views
3

console.log()應該在JavaScript中調用變量時打印出變量的值嗎?這是我的假設,但是當我在Firefox(使用Firebug)或Google Chrome(並使用內置的開發工具)中運行下面的代碼時,我似乎得到了數組的「最終」值,而不是陣列。如果我使用alert()語句,它們會打印出我期望的內容 - alert()語句被調用時的數組值。JavaScript:console.log()給出的結果不同於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; 
} 
+2

控制檯日誌的對象,所以對對象所作的任何更改都將得到體現在記錄objet – 2013-03-20 15:49:54

+3

'console.log(JSON.stringify(yourObj));' - 試試。 – 2013-03-20 15:50:20

+0

爲什麼你創建一個數組並填充屬性而不是值?爲什麼不使用Object來代替? – newtover 2013-03-20 15:53:53

回答

4

正如我在評論console.log(obj)表示不記錄一個字符串表示,它記錄在存儲器中的實際的JavaScript對象的引用。因此,對該對象所做的任何更改都會反映到記錄的實例中。

如果您想跟蹤所做的漸進式更改,請將該對象轉換爲字符串並打印,如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; 
} 

演示:Fiddle

相關問題