Chrome 的JavaScript 控制台行為:延遲評估物件
Chrome JavaScript 控制台在評估物件時的行為被認為可能是意外的。為了說明這一點,請考慮以下程式碼:
var s = ["hi"]; console.log(s); s[0] = "bye"; console.log(s);
在Firefox 中,控制台輸出:
[ "hi" ] [ "bye" ]
但是,在Chrome 版本7.0.517.41 beta 中,輸出為:
[ "bye" ] [ "bye" ]
意外的評估行為
此行為表明 Chrome 的控制台在評估對象時可能會「惰性」。當執行第一個console.log語句時,控制台會引用記憶體中的物件。對物件的任何後續修改(例如將第一個元素從“hi”更改為“bye”)不會反映在第一個 console.log 語句的輸出中。這表示控制台僅在第一個 console.log 語句時評估物件並儲存快照。
錯誤說明
此行為記錄在下列Webkit 錯誤回報:https://bugs.webkit.org/show_bug.cgi?id=35801(現已修正)。此錯誤表明 Chrome 的控制台不會對直接存取的物件執行延遲評估,從而導致觀察到的行為。
解決方法
為了防止這種意外行為,一個可以在將物件傳遞到 console.log 之前對其調用 toString。這會強制 Chrome 建立不會因後續變更而變更的物件表示,從而確保控制台輸出反映物件的當前狀態。
var s = ["hi"]; console.log(s.toString()); s[0] = "bye"; console.log(s.toString());
輸出:
hi bye
以上是為什麼 Chrome 的 JavaScript 控制台在評估物件時顯示意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!