亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Javascript 2D 數組意外行為

Javascript 2D 數組意外行為

瀟瀟雨雨 2022-06-09 17:17:31
我目前正在使用 Javascript 進行開發,但遇到了一個問題,我無法解決。我會說我在編程方面非常有經驗,但是以前從未發生過這樣的事情,而且我無法通過朋友或互聯網解決它。在下面的代碼中,我創建了一個簡單的二維數組并用 0.1 填充每個位置。然后我記錄數組,修改它并再次記錄。你期望輸出是什么?我希望它記錄一個充滿許多 0.1s 的數組并記錄另一個充滿許多 0.1s 的數組,并且在位置 1,2 它應該是 100。但真正的結果是兩個相似的數組。當我注釋掉我編輯數組的行時,它變得更加奇怪。然后輸出數組再次相同,但沒有修改。所以第一個日志取決于它之后執行的代碼。這對我來說似乎非常奇怪。我還嘗試將修改行設置為 1 秒超時。結果相同。提前感謝您的幫助。let test = [];for (let xx = 0; xx < 2; xx++) {   test.push([]);   for (let yy = 0; yy < 6; yy++) {      test[xx].push(0.1);   }}    console.log(test);test[1][2] = 100;console.log(test);
查看完整描述

3 回答

?
HUWWW

TA貢獻1874條經驗 獲得超12個贊

查看在您的問題中編輯的片段。您的代碼工作正常。

如果您在瀏覽器的控制臺上看到兩次相同的數組,那是因為瀏覽器的開發工具是如何工作的。執行時數組不會打印到控制臺console.log(test),它們的引用會打印在那里。然后你“擴展”數組的內容。由于您記錄了兩次相同的引用,因此它們指向相同的值。

如果您console.log(test.toString())改為登錄,您會看到兩個記錄的值不同。

例如,在 Chrome 上:

展開前:

http://img1.sycdn.imooc.com//62a1bac40001405004330400.jpg

展開后:

http://img1.sycdn.imooc.com//62a1bad000016ffd04290501.jpg


查看完整回答
反對 回復 2022-06-09
?
侃侃爾雅

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);

})();


查看完整回答
反對 回復 2022-06-09
?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

每當您這樣做console.log(someObject)時,瀏覽器都會輸出對象的實時視圖;這意味著您對該對象所做的任何更改都會更新控制臺輸出。

而是使用JSON.stringify(someObject)然后序列化對象console.log。這會在序列化時為您提供該對象的快照。但是你必須小心,someObject可能有循環引用,并且很少有其他陷阱,這會在序列化過程中產生問題。

請參閱https://developer.mozilla.org/en-US/docs/Web/API/Console/log


查看完整回答
反對 回復 2022-06-09
  • 3 回答
  • 0 關注
  • 152 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號