又发现个问题,debug给奖金么?
发布于 4 年前 作者 fangyao 14335 次浏览 来自 问答

微信开发工具中

以下代码

var aa={a:1,b:2,c:3};
console.log(aa);
aa.a=9;

运行后  调试器 的 console 中显示 有问题    ,  用鼠标按开 这个对象前面的箭头。。。 里面显示的内容 是错误的!

看了以下某些回复,觉得可笑,

英文 log 的含义是 日志

什么叫日志?

日志 应该 忠实记录当时的现场情况 ,

现场情况就应该是当时模样,不能引用,

这就像 警察记录命案现场,结果只在本本上写了个地址,后面写着具体内容自己去这个地址看  一样

并且 按开 箭头以后 上下内容不一致  也不符合正常人类的习惯

最后

斯德哥尔摩综合症 说的就是 你被人劫持了,最后还替匪徒打圆场,找各种理由,证明匪徒没有错,匪徒是被迫的。

10 回复

大家的吐槽还真是不遗余力啊

看了评论,再看下楼主说的  最后。

这个不是错,console.log是异步函数,打印9是正确的

哈哈哈楼主好好补下功课。会实现也要知道其原理。

js引擎怎么知道你需要展开多少个节点,为了保持你打印的对象就是那一个瞬间的,就给你保存下来整个树状节点,而js的对象又是原型链构造的,全保存下来得占多少内存,弄不好还内存泄漏了。java等直接打印还只能是个内存地址呢。这里只能把对象给序列化再打印。

我想说的是,你是不是在某个地方更改了a的值?   外面存的是快照  里面的是实际的值,js的特性而已

这是正常数据,因为你打印的是一个object,控制台显示的是缩略图,打印出缩略图之后,你又把值改了,所以缩略图不会进行修改,当你点开的时候,查看的是详细,所以就看到了修改后的,控制台并不是实时显示内存中的数据,想查看实时数据,请在sources中打断点进行watch

这是chromium自身的特性,并非开发者工具的行为,如果有更好的建议的话可以提到chromium的issue tracker上:https://www.chromium.org/issue-tracking

楼主居然还回复,让别人长点心。。。。

回到顶部