考虑这个javascript:
var foo = {bar : 1111};
console.log(foo);
console.log(foo.bar);
foo.bar = 2222;
console.log(foo);
console.log(foo.bar);
Run Code Online (Sandbox Code Playgroud)
在Firefox的firebug中,这显示了我的预期:
Object { bar=1111}
1111
Object { bar=2222}
2222
Run Code Online (Sandbox Code Playgroud)
但是,在Safari和Chrome的控制台中,它显示:
Object { bar=2222}
1111
Object { bar=2222}
2222
Run Code Online (Sandbox Code Playgroud)
换句话说,对象在打印转储时在控制台中显示错误的属性,但是如果打印特定属性则显示正确的值.
这是浏览器的怪癖吗?或者我缺少面向对象的javascript的一个基本方面?
console.log()是否应该在JavaScript中调用时打印出变量的值?这是我的假设,但当我在Firefox(使用Firebug)或谷歌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++) …Run Code Online (Sandbox Code Playgroud) javascript ×2