覆盖Javascript数组中的值不会与控制台输出发生冲突

覆盖Javascript数组中的值不会与控制台输出发生冲突,javascript,arrays,Javascript,Arrays,这里是我在项目中处理的对象数组的简化版本- let test = []; test['12/1/2019'] = {k1: 25, k2: 'hello'}; test['1/1/2020'] = {k1: 14, k2: 'bonjour'}; console.log(test); test['12/1/2019'] = {k1: 16, k2: 'ciao'}; test['1/1/2020'] = {k1: 10, k2: 'good day'}; 由于console.log(test)

这里是我在项目中处理的对象数组的简化版本-

let test = [];
test['12/1/2019'] = {k1: 25, k2: 'hello'};
test['1/1/2020'] = {k1: 14, k2: 'bonjour'};
console.log(test);
test['12/1/2019'] = {k1: 16, k2: 'ciao'};
test['1/1/2020'] = {k1: 10, k2: 'good day'};
由于
console.log(test),我希望控制台输出显示这一点位于覆盖原始值的代码行之前:


但是,实际的控制台输出如下:


为什么它会这样做?

这是因为JavaScript引擎批量运行每一个代码

从代码上看,它看起来像是
console.log
在为数组设置新值之前被调用,但实际上,当前迭代中的所有命令都是在
console.log
在下一次迭代中运行之前先运行的

由于
test
是对存储
test
数组值的内存位置的引用,因此它现在表示更新后的值


同样的情况也适用于对象。

看到控制台日志中的
i
图标了吗?如果您将其悬停,它会告诉您该日志此时已计算,因此它显示的是
test
的当前值,而不是调用
.log()
时的值。该日志在什么上运行?如果您在节点中执行此操作并尝试类似console.log(util.inspect(test,{maxArrayLength:null})的操作;您将看到问题没有发生。@KyleBerezin这在Vue.js中。我复制/粘贴了您的代码并重新执行,但收到以下错误消息:[Vue Warn]:created hook中的错误:“ReferenceError:util未定义”@knot22 yea,util是一个节点包。