javascript的对象属性成员变得如此奇怪

时间:2017-09-28 03:09:00

标签: javascript

var obj = {name:"小明"};
console.log("obj1",obj);
// 1. {name:"小明",age:10}
obj.age = 10;
console.log("obj2",obj);
// 2. {name:"小明",age:10}

为什么浏览器控制台会在第一次显示结果?我认为reuslt应该是一个未更改的对象{name:"小明"}。现在,我对此感到头疼。感谢您的回复。

3 个答案:

答案 0 :(得分:1)

这是因为您在添加新属性age后看到/展开了对象。 最初,该对象只有一个属性,但是当您检查它时,新的键将被添加到对象

enter image description here

另一种方法是使用hasOwnProperty进行验证。在下面的代码段中,第一个console.log语句将不会被执行,因为该对象没有密钥使用期限

var obj = {
  name: "小明"
};
if (obj.hasOwnProperty('age')) {
  console.log("obj1", obj);
}
obj.age = 10;
console.log("obj2", obj);

答案 1 :(得分:0)

展开对象时,将在运行时评估控制台中显示的值。

Chrome控制台中的工具提示,说明在运行时评估值:

Tooltip in Chrome console explaining that values are evaluated at runtime

您可以尝试JSON.stringify将当前值打印到控制台。

e.g。

console.log("obj1", JSON.stringify(obj));

答案 2 :(得分:0)

这取决于浏览器。如果我没记错的话,chrome会记录一个不变的对象,而firefox会记录一个不变的对象。无论哪种方式,obj.age都将是未定义的,直到您定义它为止。