首页 > web前端 > js教程 > 为什么 Chrome 的 JavaScript 控制台在评估对象时显示意外结果?

为什么 Chrome 的 JavaScript 控制台在评估对象时显示意外结果?

Mary-Kate Olsen
发布: 2024-12-27 04:59:13
原创
643 人浏览过

Why Does Chrome's JavaScript Console Show Unexpected Results When Evaluating Objects?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板