为什么我在第一次console.log的后面去改变的extension[0]里面的值, 第一次console.log里面extension[0]的值为什么不是es7而是es2016呢?

来源:2-2 const声明的常量真的不可以改变吗

Candy__2026

2022-07-01 15:05

<script>
    const esobj = {
        name: "es6",
        year: "2015",
        extension: ["es7", "es8", "es9"]
    }
    Object.freeze(esobj);
    esobj.name = "es2015"
    console.log(esobj)
    esobj.extension[0] = "es2016"
    console.log(esobj)
</script>
写回答 关注

1回答

  • 谢成
    2022-07-04 15:01:58
    已采纳

    1、上面的extension是个数组,是引用数据类型,引用数据类型是存储在堆内存的

    2、Object.freeze()是浅层冻结,不是深层冻结

    3、console.log()的输出可以理解为是一种异步的,可以看下这里:https://www.jianshu.com/p/f7535d62acbd


带你快速入坑ES6

结合ES6中特性的使用方式及常被大家忽略的问题,带你体会ES6语法魅力。

11716 学习 · 42 问题

查看课程

相似问题