Object.freeze() 性能优化

2,778 阅读1分钟

这里先讲一下const

const和let特性一样具有块级作用域

区别:const定义的变量不能修改【const定义的是栈 复杂数据类型记住的是地址】

const定义完变量必须有值,不能后赋值 相当于常量

要让复杂数据类型不能更改需要 const obj = Object.freeze(对象)

Object.freeze() 来完全冻结一个对象(数组)

const obj ={a:1}
obj.a=2
obj.b = 3
console.log(obj) //输出结果是 {a:2,b:3}
// 这里我们要obj需要对象里的值不能改变
const obj2 = Object.freeze({a:1})
obj2.a=2
obj2.b=2
console.log(obj2)  // 输出结果是 {a:1}

freeze冻结的是堆内存中的值,和栈中的引用无关

Object.freeze() 可以性能优化

参考vue的源码,定义响应式的时候,如果freeze后的数据,不会加上settergetter

注意:vue内部不再去监听数据的变化提高性能

Object.seal() 来冻结一个对象属性 (说起Object.freeze了顺便说下Object.seal())

Object.seal()和OBject.freeze()的区别是Object.seal()冻结的对象值可以改变 但不能增加属性

const obj2 = Object.freeze({a:1})
obj2.a=2
obj2.b=2
console.log(obj2)  // 输出结果是 {a:1}
const obj3 = Object.seal({a:1})
obj3.a=2
obj3.b=2
console.log(obj3)  // 输出结果是 {a:2}