8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

Chrome 的 JavaScript 控制台在评估对象时是否很懒惰?

lobati 2月前

101 0

我先从代码开始:var s = [\'hi\'];console.log(s);s[0] = \'bye\';console.log(s);很简单,对吧?响应此代码,Firefox 控制台显示:[ \'hi\' ][ “...

我将从代码开始:

var s = ["hi"];
console.log(s);
s[0] = "bye";
console.log(s);

很简单,对吧?Firefox 控制台响应此消息并显示:

[ "hi" ]
[ "bye" ]

太棒了,但是 Chrome 的 JavaScript 控制台(7.0.517.41 beta)显示:

[ "bye" ]
[ "bye" ]

是我做错了什么吗,还是 Chrome 的 JavaScript 控制台在评估我的数组时特别懒惰?

Screenshot of the console exhibiting the described behavior.

帖子版权声明 1、本帖标题:Chrome 的 JavaScript 控制台在评估对象时是否很懒惰?
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由lobati在本站《object》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 感谢评论,tec。我找到了一个现有的未经证实的 Webkit 错误来解释这个问题: https://bugs.webkit.org/show_bug.cgi?id=35801 ?id=35801(编辑:现已修复!)

    关于这个错误有多严重以及是否可以修复,似乎存在一些争议。在我看来,这确实是一种不好的行为。这对我来说尤其令人不安,因为至少在 Chrome 中,当代码驻留在立即执行的脚本中时(在页面加载之前),即使控制台已打开,只要页面刷新,就会发生这种情况。在控制台尚未激活时调用 console.log 只会导致对排队对象的引用,而不是控制台将包含的输出。因此,在控制台准备就绪之前,不会对数组(或任何对象)进行评估。这确实是一种惰性评估的情况。

    但是,有一个简单的方法可以在代码中避免这种情况:

    var s = ["hi"];
    console.log(s.toString());
    s[0] = "bye";
    console.log(s.toString());
    

    通过调用 toString,您可以在内存中创建一个表示形式,该表示形式不会被以下语句改变,控制台将在准备就绪时读取该表示形式。控制台输出与直接传递对象略有不同,但似乎是可以接受的:

    hi
    bye
    
返回
作者最近主题: