覆盖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是一个节点包。