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條經驗 獲得超5個贊
每當您這樣做console.log(someObject)
時,瀏覽器都會輸出對象的實時視圖;這意味著您對該對象所做的任何更改都會更新控制臺輸出。
而是使用JSON.stringify(someObject)
然后序列化對象console.log
。這會在序列化時為您提供該對象的快照。但是你必須小心,someObject
可能有循環引用,并且很少有其他陷阱,這會在序列化過程中產生問題。
請參閱https://developer.mozilla.org/en-US/docs/Web/API/Console/log
添加回答
舉報