美文网首页
奇怪的console.log

奇怪的console.log

作者: Bouc | 来源:发表于2021-03-23 11:47 被阅读0次

    今天调试的时候遇到一个困惑的问题,

    let a = [{age:18}]
    console.log(a)
    a[0].age = 20
    

    将这段代码复制到chrome控制台运行时,输出结果是 [{age:20}],但是按照执行顺序,结果应该是 [{age:18}]才对。

    chrome控制台结果

    在node环境下跑了下,结果却是正常的!看来问题出在chrome控制台。

    node环境结果

    原因分析

    1. js里对象是引用类型,会公用内存。

    2. chrome的console.log不会把复杂对象立即输出,点击展开时才会去内存中读取对象的属性值,此时内存中对象的属性已经被修改了,所以看到的是修改后的值

    结论

    通过console.log输出基本类型时是可信的,但对于引用类型是不一定的,通过JSON.stringify可以解决。

    node环境里,console.log()是同步的,不会有这种问题出现。

    相关文章

      网友评论

          本文标题:奇怪的console.log

          本文链接:https://www.haomeiwen.com/subject/pvsxhktx.html