記一次"Value below was evaluated just now"

今天工作的時候使用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秒之後再展開數組看結果吧:
圖片描述
哈哈,“奇怪”的現象又發生了

所以結論就是:當你在控制檯展開打印出來的數組(或者對象)的時候,如果此時數組(或者對象)的數據已經發生了改變,那麼將顯示改變之後的數據。如果此時數組(或者對象)的數據沒有發生改變,那麼就一直顯示此時的數據

(新人一枚,如有錯誤歡迎大家指出,謝啦)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章