for循环中向数组推入对象结果不符合预期,请求解析原因
问题原因解释
你这段代码的核心问题是只创建了一个对象实例:
var obj = {}是在循环外部定义的,整个循环过程中,所有操作都是针对同一个对象。- JavaScript里对象属于引用类型,变量
obj存储的不是对象本身,而是它在内存中的地址。每次执行obj["var"] = i,都是修改这个地址指向的对象的属性值;而arr.push(obj)只是把这个地址存入数组,数组里的10个元素其实都是指向同一个对象的引用。
循环结束时,最后一次赋值把obj["var"]设为9,数组里所有元素指向的都是这个最终状态的对象,所以打印出来全是{var: 9}。
修正方案
把对象的创建放到循环内部,每次循环生成新的对象实例:
var arr = []; for (i = 0; i < 10; i++) { var obj = {}; obj["var"] = i; arr.push(obj); }; console.log(arr);
或者更简洁的写法,直接用对象字面量创建:
var arr = []; for (i = 0; i < 10; i++) { arr.push({ "var": i }); }; console.log(arr);
内容的提问来源于stack exchange,提问作者hex
相关产品推荐
相关产品推荐

