const 关键字是用来声明一个常量的,它可以使一个变量引用不能被改变,而且在定义之初就要赋予初值,不然会报语法错误。这个变量如果是数组或者对象,则它里面的内容其实是可以修改的。

Object.freeze() 方法是冻结了一个对象里面属性的引用,对象的属性值不能改变,但如果对象的属性值是另一个数组或对象,则这个属性值的内部依然可以修改。所以 Object.freeze() 实际上是一个浅冻结

const obj = {
    name:'zhangsan',
    age:18,
    address:[
        'asuhe',
        'asuka'
    ]
}
console.log(obj.age); // 18
obj.age = 20;
console.log(obj.age); // 20
obj = {}; // TypeError
Object.freeze(obj)
obj.age = 30; 
console.log(obj.age); //20
obj.address = []; // 修改失败,但不报错
obj.address[0] = 'sphinx';
console.log(...obj.address); //'sphinx' 'asuhka'

Object.freeze() 内部还会调用 Object.seal() 方法,让被冻结的对象不能添加或删除属性

参考资料:

[Object.freeze() vs const](https://stackoverflow.com/questions/33124058/object-freeze-vs-const)

const vs Object.freeze() in JavaScript