2013-03-20 128 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

相关问题