3 回答
TA贡献1874条经验 获得超12个赞
查看在您的问题中编辑的片段。您的代码工作正常。
如果您在浏览器的控制台上看到两次相同的数组,那是因为浏览器的开发工具是如何工作的。执行时数组不会打印到控制台console.log(test)
,它们的引用会打印在那里。然后你“扩展”数组的内容。由于您记录了两次相同的引用,因此它们指向相同的值。
如果您console.log(test.toString())
改为登录,您会看到两个记录的值不同。
例如,在 Chrome 上:
展开前:
展开后:
TA贡献1801条经验 获得超16个赞
console.log
关于异步/同步会有不同的行为。
您可以使用 Promise 或 async/await 实现不同的输出
let test = [];
for (let xx = 0; xx < 2; xx++) {
test.push([]);
for (let yy = 0; yy < 6; yy++) {
test[xx].push(0.1);
}
}
Promise.resolve(console.log(test)).then(() => {
test[1][2] = 100;
}).then(()=>{
console.log(test);
})
或使用异步/等待
let test = [];
for (let xx = 0; xx < 2; xx++) {
test.push([]);
for (let yy = 0; yy < 6; yy++) {
test[xx].push(0.1);
}
}
(async() => {
await console.log(test)
test[1][2] = 100;
await console.log(test);
})();
TA贡献1821条经验 获得超4个赞
每当您这样做console.log(someObject)
时,浏览器都会输出对象的实时视图;这意味着您对该对象所做的任何更改都会更新控制台输出。
而是使用JSON.stringify(someObject)
然后序列化对象console.log
。这会在序列化时为您提供该对象的快照。但是你必须小心,someObject
可能有循环引用,并且很少有其他陷阱,这会在序列化过程中产生问题。
请参阅https://developer.mozilla.org/en-US/docs/Web/API/Console/log
添加回答
举报