怎样使一个对象不可改变? 那就冻结她-Object.freeze(obj)

536 阅读2分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

上文提到 sort方法 无法对冻结的数组进行排序操作, 本文详细学习下对数组和对象的 冻结 知识点.

Object.freeze( Object || Array )

Object.freeze( Object || Array ), 可以将一个对象冻结, 使之变成一个不可变的对象. 此方法可以增加我们的程序的可靠性.

当我们创建了一个可靠的对象, 可以使用 Object.freeze(obj) 方法冻结这个对象, 以防止其他方法对其的破坏和篡改.

不可变对象带来的安全性, 对于现阶段的工作开发实战来说是非常重要的.在系统中安装的各种不可信的代码似乎已经是一种惯例.

不可变对象可以为我们提供良好的接口保护, 这种对象的不可变性可以将代码变得更可靠, 更安全,

注意: 浅层冻结

但是这个方法 Object.freeze(obj), 只是类似于 "浅拷贝", 只对对象的最顶层的属性进行冻结, 并不是深度冻结.

Object.freeze(obj)const obj 的区别

冻结数组

我们对一个数组进行冻结

let my_array = ['xn213', 'rainbows', 'beauty', 'moments']
Object.freeze(my_array)
my_array.sort()

上面代码在 Chrome console 面板的运行结果如下:

1-js-sort

const 定义一个 变量 obj

我们知道 const 定义的也是不可更改的, 如下

const OBJ = '这个 OBJ 是不可更改的'

OBJ = '改改就是试试!'

console.log(OBJ)

const.png

补充一下, 表述不完善的地方, 感谢掘友提醒:

文中没表述清楚: Object.freeze() 作用于值,  而const 作用于变量. 

const 定义的引用类型变量, 可更改内部元素, 但是不能为这个变量赋另外一个值 

可以根据下面简单代码理解:

const obj1= {}
obj1.foo = 1 //  可以;  
obj1 = 3 // 报错

Object.freeze(obj2)   
obj2.foo = 1   // 报错;  
obj2 = 3 // 可以