var obj = {name:"小明"};
console.log("obj1",obj);
// 1. {name:"小明",age:10}
obj.age = 10;
console.log("obj2",obj);
// 2. {name:"小明",age:10}
为什么浏览器控制台会在第一次显示结果?我认为reuslt应该是一个未更改的对象{name:"小明"}
。现在,我对此感到头疼。感谢您的回复。
答案 0 :(得分:1)
这是因为您在添加新属性age
后看到/展开了对象。
最初,该对象只有一个属性,但是当您检查它时,新的键将被添加到对象
另一种方法是使用hasOwnProperty
进行验证。在下面的代码段中,第一个console.log语句将不会被执行,因为该对象没有密钥使用期限
var obj = {
name: "小明"
};
if (obj.hasOwnProperty('age')) {
console.log("obj1", obj);
}
obj.age = 10;
console.log("obj2", obj);
答案 1 :(得分:0)
展开对象时,将在运行时评估控制台中显示的值。
Chrome控制台中的工具提示,说明在运行时评估值:
您可以尝试JSON.stringify
将当前值打印到控制台。
e.g。
console.log("obj1", JSON.stringify(obj));
答案 2 :(得分:0)
这取决于浏览器。如果我没记错的话,chrome会记录一个不变的对象,而firefox会记录一个不变的对象。无论哪种方式,obj.age
都将是未定义的,直到您定义它为止。