小白问一个数组和循环的问题
发布于 7 年前 作者 ShookABeta 3027 次浏览 来自 问答
var doc = {
    id: 0
};

var docs = [];
for (let i = 0; i < 10; i++) {
    doc.id = i;
    docs[i] = doc
}

console.log(docs)

为什么结果是:

[ { id: 9 },
  { id: 9 },
  { id: 9 },
  { id: 9 },
  { id: 9 },
  { id: 9 },
  { id: 9 },
  { id: 9 },
  { id: 9 },
  { id: 9 } ]

而不是:

[ { id: 0 },
  { id: 1 },
  { id: 2 },
  { id: 3 },
  { id: 4 },
  { id: 5 },
  { id: 6 },
  { id: 7 },
  { id: 8 },
  { id: 9 } ]
5 回复

docs数组每一个元素都是存储的"doc",是同一个对象,所以结果都是9。你把"doc"的定义和赋值放进循环里面就可以了。

@hao5743 放里面是可以的,但是如果真的遇到类似在场景应该怎么处理呢?变量已经在外面定义,需要在循环里面改变。

引用类型,你需要深入学习js这门语言

@ShookABeta js引用类型的值是按引用进行访问的。你可以了解下对象克隆,比如用Object.assign({},doc);

找了几篇讲引用类型的文章看了看,勉强理解了对象的引用,谢谢两位大侠。

回到顶部