跳到主要内容
CNode

小白问一个数组和循环的问题

问答
SShookABeta发布于 10 年前最后回复 10 年前
536930
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)

S
ShookABeta#510 年前

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

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

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

S
stonephp#310 年前

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

S
ShookABeta#210 年前

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

H
hao5743#110 年前

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

参与回复

登录后即可参与回复。登录