今天小伙伴给我分享了Object.freeze()这个方法,官方是这么解释的
Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。
当时我就想,这不是和const作用差不多吗,为什么不直接用const,然后才发现我对const有很深的误解= =、
关于const,MDN的描述是这样的:
此声明创建一个常量,其作用域可以是全局或本地声明的块。 与var变量不同,全局常量不会变为 window 对象的属性。需要一个常数的初始化器;也就是说,您必须在声明的同一语句中指定它的值(这是有道理的,因为以后不能更改)。
const声明创建一个值的只读引用。但这并不意味着它所持有的值是不可变的,只是变量标识符不能重新分配。例如,在引用内容是对象的情况下,这意味着可以改变对象的内容(例如,其参数)。
关于“暂存死区”的所有讨论都适用于let和const。
一个常量不能和它所在作用域内的其他变量或函数拥有相同的名称。
这段话也很好理解,就是基本数据类型不可变,引用数据类型的属性是可变的,但引用数据类型的地址不可变。