JavaScript中循环新增对象属性,每次打印的结果都一样

const obj = {aa: {}, bb: {}}; for(let i=0;i<10;i++) {if (i === 0) {obj.aa.uv=i} else if (i === 1) {obj.aa.uv11=i} else if (i === 2) {obj.aa.uv22=i} console.log(obj)}

因为console.log()输出对象或数组时是在控制台显示一个对象或数组的引用。

在用console.log()输出数组或对象时,对象(数组)的属性是折叠不显示的。
如果你在console.log()输出之后改变了对象(数组)的属性,当你点击三角展开属性时,会重新读取对象(数组)当前的属性,也就是显示出来的是你点击三角展开时的属性,而不是执行console.log()时的属性。

解决方法是用console.log(JSON.stringify(obj));以字符串方式输出
 

因为引用是一样的

你要在循环里new Object()

 for(let i=0;i<10;i++)  {const obj = {aa: {}, bb: {}};if (i === 0) {obj.aa.uv=i} else if (i === 1) {obj.aa.uv11=i} else if (i === 2) {obj.aa.uv22=i} console.log(obj)}

 

因为引用是一样的

你要在循环里new Object()

 for(let i=0;i<10;i++)  {const obj = {aa: {}, bb: {}};if (i === 0) {obj.aa.uv=i} else if (i === 1) {obj.aa.uv11=i} else if (i === 2) {obj.aa.uv22=i} console.log(obj)}

 

// 创建一个对象
const obj = { aa: {}, bb: {} };
// 循环10次
for (let i = 0; i < 10; i++) {
  //第一次 obj = { aa: {}, bb: {} }
  //第二次 obj = { aa: {uv:0,uv11:1,uv11:2}, bb: {} } 
  //第N+1 obj = { aa: {uv:0,uv11:1,uv11:2}, bb: {} }
  if (i === 0) {
    obj.aa.uv = i;
    // obj = { aa: {uv:0}, bb: {} }
  } else if (i === 1) {
    obj.aa.uv11 = i;
    // obj = { aa: {uv:0,uv11:1}, bb: {} }
  } else if (i === 2) {
    obj.aa.uv22 = i;
     // obj = { aa: {uv:0,uv11:1,uv11:2}, bb: {} }
  }
  console.log(obj);
}

如果对您有帮助,希望你可以点赞 + 采纳,这是对我最大的鼓励