使用console调试js程序遇到的问题?


在对js的一段程序调试的时候,在程序片段中使用console.log(),想输出运行到某个代码时一些值的变化,主要跟踪下程序的执行哪里出问题,但是输出到 console 中的值一直很诡异,完全不是我想的那样,最后将js代码删减,一直删减到如下:

   
  <script type="text/javascript">
  
var test=["aa","bb","cc"];
console.log(test);
test.splice(2);
console.log(test);
</script>

请输入图片描述
最终放弃了使用console.log(); 改用 alert() 来对程序测试,测试过程中虽然不方便,但是很早到了问题所在。 大家分析下输出的结果为什么是如图所示的那样?

看了 @浪际天涯 的答案,火狐下输出的果然是预期的值,我刚又在opera下测试发现输出的和Chrome 的结果一样
请输入图片描述

浏览器 JavaScript

nana822 12 years ago

本来是想写评论的,由于不能传图片,我只能以答案来回答你了
我用你的代码调试没有问题,是能够完整的输出数组,我怀疑是你的firebug或者是浏览器版本问题,重新安装一下试试吧.
以下是我调试的结果:(我的环境是:firefox9.0.1, firebug:1.9.1)
请输入图片描述

至于Chrome下的问题:

我用Chrome测试了一下,确实是这样的,在Google找找了些国外的资料,发现这个问题是Chrome的一个Bug(至今未修复),大致的原因是这样的:由于第一个console.log(test)的test内容,在Chrome内部线程中还未输出到控制台就被下一条test.splice(2)改变了test数组的值,所以导致两个console.log(test)都输出,['aa', 'bb'],所以在webkit的引擎下,该问题的解决方案就是无解,还是乖乖用Firefox吧。

一般会社员刺猬 answered 12 years ago

Your Answer