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中文网其他相关文章!