小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
上文提到 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
面板的运行结果如下:
const 定义一个 变量 obj
我们知道 const 定义的也是不可更改的, 如下
const OBJ = '这个 OBJ 是不可更改的'
OBJ = '改改就是试试!'
console.log(OBJ)
补充一下, 表述不完善的地方, 感谢掘友提醒:
文中没表述清楚: Object.freeze()
作用于值, 而const
作用于变量.
const 定义的引用类型变量, 可更改内部元素, 但是不能为这个变量赋另外一个值
可以根据下面简单代码理解:
const obj1= {}
obj1.foo = 1 // 可以;
obj1 = 3 // 报错
Object.freeze(obj2)
obj2.foo = 1 // 报错;
obj2 = 3 // 可以