ES6-const本质与完全不可改实现(Object.freeze)

本质

const 是 es6 定义的 常量(定义后 不可改)标志

但不完全不可改

  • 对于 基本类型(数字 字符串 布尔)不可以更改
    • 因为 const保存的是其内容(或栈区地址 更准确)
  • 但对于 复合类型(数组 对象)const 保存的是一个引用地址
    • 只要引用地址不变可以任意修改该地址指向的对象的任意内部属性
const arr = [];
arr.push(3);// ok
arr = [];// error

但可以做到完全不能改

关键是利用Object.freeze
实现常量完全不可改

var constancize = (obj) => {
	Object.freeze(obj);
	Object.keys(obj).forEach((key, i)=>{
		// 递归 对子属性为对象的 进行 freeze
		if(typeof obj[key] == 'object'){
			constancize(obj[key]);
		}
	})
}

猜你喜欢

转载自blog.csdn.net/weixin_42043407/article/details/121379725