object.freeze的应用_蓓蕾心晴-编程思维

概念

Object.freeze() 方法可以冻结一个对象。一个被冻结的对象再也不能被修改;冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性、可配置性、可写性,以及不能修改已有属性的值。此外,冻结一个对象后该对象的原型也不能被修改。freeze() 返回和传入的参数相同的对象。

注意

  • 冻结数组,数组不能被修改,但如果数组中的是对象,对象依然可以被修改
  • 冻结对象,对象中的属性的值依然为一个对象,对象依然可以被修改
  • 要使整个对象或整个数组不可变,需要递归冻结每个类型为对象的属性(深冻结)
  • 严格模式会报错
// 数组中是对象
const arr=[{
  aaa: 42
}]
Object.freeze(arr);
arr[0]["aaa"]=222
arr.push(123) // // Uncaught TypeError: Cannot add property 1, object is not extensible
    at Array.push
console.log(arr); 

// 普通对象
const obj={
  bbb: 000
}
Object.freeze(obj);
obj.bbb=111;
console.log(obj) //  {bbb: 000}

// 对象中的值为对象
const obj2={
  ccc: {aaa:1}
}
Object.freeze(obj2);
obj2.ccc.aaa=2;
console.log(obj2) // {ccc: {aaa:2}}

应用

  • const本意是无法修改的一个值,但只对简单类型生效,在使用const定义一个对象时,我们依然可以修改这个对象,并且不会报错,所以我们如果要达到无法修改的效果,就可以用Object.freeze()实现。
  • 在Vue中,使用Object.freeze()冻结一个不会被改变的对象时,能大幅提高运行效率,因为vue会对Object.freeze()进行过滤,当遇到的时候就不会再遍历该数据对象。

其他

**Object.isFrozen()**方法判断一个对象是否被冻结。 

 

参考链接:https://www.cnblogs.com/BlueCc/p/14306778.html

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/isFrozen

版权声明:本文版权归作者所有,遵循 CC 4.0 BY-SA 许可协议, 转载请注明原文链接
https://www.cnblogs.com/beileixinqing/p/16715511.html

阿里云人脸比对api封装_liangsencheng小森森-编程思维

 这是根据封装是根据阿里云官方给的Demo进行修改的,当时是因为编写微信小程序云函数需要使用到阿里云人脸比对接口,才对其进行封装的。 记录下来,方便下次使用。 复制下来可以直接使用。 用到的依赖如下,使用npm安装: request url crypto 1 /** 2 * 文件说明:阿里云人脸比对AP

实现 div 元素内容超出可通过滚轮上下滑动从而使元素横向滚动_enziandom-编程思维

移动端中的元素内容超出时,对容器设置overflow-x: auto就可以通过手势水平移动。但是 PC 端只能通过鼠标滚轮上下滑动,而不能水平移动。 只需要给元素添加一个监听鼠标滚轮事件,上下滑动时修改其 scrollLeft 属性值就可以实现。直接贴上代码: <div class="horizontal-sli

js中数组的操作方法_markguan-编程思维

今天给大家带来一篇有关数组操作方法的文章。 新建数组 方法一:通过new运算符创建一个数组构造函数。 var arr = new Array(); 方法二:通过方括号直接创建直接量数组。 var arr = [1,2,3]; 添加数组中的元素 方法一:通过下标添加元素。 var arr = new A

js 模块化- 01 模块化前传 _程序员优雅哥(\/同)-编程思维

JS 模块化 01 - 模块化前传 前端技术的发展不断融入了很多后端的思想,逐步形成前端的 ”四个现代化“:工程化、模块化、规范化、流程化。这个主题介绍 模块化 ,主要内容包括模块化前传(早期模块化的实现)、模块化的四个规范(Common JS、AMD、CMD、ESM)。本文就聊聊早期的模块化。 1. 原始时代 - 无