今天工作的時候使用console.log()打印數組調試代碼的時候,發現了一個奇怪的現象
咦 數組展開之前,顯示的是[1,2,3],展開後卻顯示的是[1,2,3,4]。好奇怪啊,以前怎麼
沒有遇到啊(原諒我的年輕。。。)這時候我注意到右上角有個藍色的小圖標,於是我把鼠
標移動上去,最後出現在我眼前的是“Value below was evaluated just now”這一行大字。
爲了弄清楚原因,我查了一波資料,才發現是因爲console.log()之後的代碼改變了數組!
let array = [1, 2, 3]
console.log(array)
array.push(4)
結論就是:當你展開數組的時候,顯示出來的數據是最終發生了改變的數據
後來我在想,如果是數據發生改變之前,我就展開了數組,那麼還會發生這種“奇怪”的現象嗎?
於是我執行了下面的代碼:
let array = [1, 2, 3]
console.log(array)
setTimeout(() => array.push(4), 5000)
眼疾手快的我在不到一秒的時間點開了數組,等待着“奇怪”的現象發生
等了好久好久,發現一直是這個界面:
這次,我刷新等5秒之後再展開數組看結果吧:
哈哈,“奇怪”的現象又發生了
所以結論就是:當你在控制檯展開打印出來的數組(或者對象)的時候,如果此時數組(或者對象)的數據已經發生了改變,那麼將顯示改變之後的數據。如果此時數組(或者對象)的數據沒有發生改變,那麼就一直顯示此時的數據
(新人一枚,如有錯誤歡迎大家指出,謝啦)