0
点赞
收藏
分享

微信扫一扫

初识Map,Set

辰鑫chenxin 2022-03-10 阅读 76

Map Object Set

Map

set(key, val): 向Map中添加新元素

get(key): 通过键值查找特定的数值并返回

has(key): 判断Map对象中是否有Key所对应的值,有返回true,否则返回false

delete(key): 通过键值从Map中移除对应的数据

clear(): 将这个Map中的所有元素删除

const m1 = new Map([['a', 111], ['b', 222]]) console.log(m1) // {"a" => 111, "b" => 222} m1.get('a') // 111
const m2 = new Map([['c', 3]]) const m3 = new Map(m2) m3.get('c') // 3 m3.has('c') // true m3.set('d', 555) m3.get('d') // 555

Set

Set对象允许存储任何类型的值,无论是原始值或是对象引用,它类似于数组,但成员的值是唯一的,没有重复的值

add(value):添加某个值,返回 Set 结构本身(可以链式调用)。

delete(value):删除某个值,删除成功返回true,否则返回false

has(value):返回一个布尔值,表示该值是否为Set的成员。

clear():清除所有成员,没有返回值。

const mySet = new Set(['a', 'a', 'b', 1, 2, 1]) 
console.log(mySet) // {'a', 'b', 1, 2} 
myset.add('c').add({'a': 1}) 
console.log(mySet) // {'a', 'b', 1, 2, 'c', {a: 1}} 
console.log(mySet.size) // 6
mySet.has(2) // true

Object 和 Map 的区别

Object和Map 的本质上都是以键值对的方式存储数据

区别

  1. 键:Object的键只能是整数,字符串或是symbol类型。 Map的key值可以为任意数据类型
  2. 元素顺序:Map会保留所有元素的顺序,Object并不会保证属性顺序
  3. 继承:Map是Object的实例对象
  4. Map的键值对个数可以从size属性获取,而Object的键值对个数只能手动计算
  5. Object都有自己的原型,原型链上的键名有可能和你自己再对象上设置的键名冲突

创建

Object与数组的创建方式相似 Map只能通过new创建

对象的key值是唯一的

Map 和 Set 都是对象(存值的方式都为键值对)

Map 键名(key)为任意数据类型

Object 键名为字符串

Set 和 Map 的区别

存取值不一样add set

  • Set 和 Map 主要的应用场景在于 数据重组 和 数据储存。
  • Set 是一种叫做集合的数据结构,Map 是一种叫做字典的数据结构。

集合 与 字典 的区别:

  • 共同点:集合、字典 可以储存不重复的值
  • 不同点:集合 是以 [value, value]的形式储存元素,字典 是以 [key, value] 的形式储存

Map 和 weakMap

垃圾回收机制会回收Map 但weakMap不会被回收,weakMap是弱引用,它自动会消失

在计算机程序设计中,弱引用与强引用相对,是指不能确保其引用的对象不会被垃圾回收器回收的引用。 一个对象若只被弱引用所引用,则被认为是不可访问(或弱可访问)的,并因此可能在任何时刻被回收。

Set 和 weakSet

weakSet只接收对象,只存储引用类型

弱引用,垃圾回收机制不考虑WeakSet对该对象的引用

weakSet没有size取值

Set:

  • 成员唯一、无序且不重复。
  • [value, value],键值与键名是一致的(或者说只有键值,没有键名)。
  • 可以遍历,方法有:add、delete、has。

WeakSet:

  • 成员都是对象。
  • 成员都是弱引用,可以被垃圾回收机制回收,可以用来保存DOM节点,不容易造成内存泄漏。
  • 不能遍历,方法有add、delete、has。

Map:

  • 本质上是键值对的集合,类似集合。
  • 可以遍历,方法很多可以跟各种数据格式转换。

WeakMap:

  • 只接受对象作为键名(null除外),不接受其他类型的值作为键名。
  • 键名是弱引用,键值可以是任意的,键名所指向的对象可以被垃圾回收,此时键名是无效的。
  • 不能遍历,方法有get、set、has、delete。

块级元素水平居中

  1. 父容器 flex justify-content:center align-items:center
  2. 父容器 positon:relative 子容器:position:absolute left:50% top:50% transform:translate(-50%,-50%)
  3. 父容器 display:table-cell text-align:center vertical-align:middle
  4. 父容器 display:grid 子容器:align-self:center(垂直居中) justify-self:center

行内元素水平居中

  1. 父容器 flex justify-content:center align-items:center
  2. 父容器 positon:relative 子容器:position:absolute left:50% top:50% transform:translate(-50%,-50%)
  3. 父容器 display:table-cell text-align:center vertical-align:middle
  4. 父容器 text-align:cneter line-height:xxxpx

盒模型

盒模型分为 W3C标准盒模型(content-box) 和IE盒模型(border-box)

标准盒模型给定的长高仅仅是内容 padding +border+content才是盒子的大小

IE盒模型给定对的长高就是该盒子的大小 width = border + padding + 内容的宽度 height = border + padding + 内容的高度

垃圾回收机制

分代式垃圾回收

  1. 很多对象在内存中的存在时间很短

  2. 不死的对象,会活得更久

    v8 把堆分成 新生代(存放生存时间短的对象) 和 老生代(存放生存时间长的对象) 两个区

    • 副垃圾回收器(回收新生代区)

    • 主垃圾回收器(回收老生代区)

垃圾回收器工作流程

  1. 标记内存空间的活动对象(还在使用的) 和 非活动对象(可以被回收)
  2. 清理内存中可以被回收的对象的内存空间
  3. 内存整理(频繁回收对象造成内存碎片过多,影响后续的大文件的存储)

副垃圾回收器(scavenge 算法)

  1. Cheney算法中将堆内存一分为二,把新生代区分成两部分,一半是对象区,一半是空闲区

  2. 新写入的对象会存到对象区,对象区装满后进行回收,在清理过程中把存活的对象复制到空闲区,且有序整理好

  3. 对象区和空闲区进行角色转换

对象晋升策略(新生代区会被存活对象装满,经过两次回收还存活的对象会移到老生代区)

主垃圾回收器(Mark-Sweep)

  1. 递归对象找到无法到达的元素(垃圾数据)

  2. 垃圾数据的清除

  3. 整理内存

JS执行机制

  1. js在浏览器中不是按顺序执行
  2. 首先进行变量提升 js代码执行前需要先编译,变量和函数会被存放在变量环境中(值默认为undefined)
  3. 执行,在变量环境中找变量和函数,然后进行赋值

事件循环机制

js执行过程,除了依靠函数调用栈来搞定函数的执行顺序外,还得依靠任务队列来搞定另一些代码的执行。整个执行过程,我们称之为事件循环过程

先执行同步代码(宏任务),执行异步代码(微任务),下一次循环

宏任务 :setTimeout setInterval setImmediate I/O UI render

微任务: promise Async/Await nextTick

异步编程

回调函数

被作为参数传入另一个函数,并在该外部函数内被调用,用来完成某些任务的函数,也被称为回调函数

回调地狱

回调的本质是回调函数作为参数传递给另一个函数,当处理比较复杂的需求时,回调函数作为参数一层层嵌套,代码结构会非常庞大,代码维护难度极高,这就叫回调地狱

解决方法

Promise async await generator

将异步代码变成同步代码

await后立即执行

多个异步代码

.then await

Promise的错误处理

catch方法捕获错误

浏览器性能优化

image-20210910094655434.png

重排

当DOM的变化影响了元素的几何信息,浏览器需要重新计算元素的集合属性,将其安放在界面中的正确位置,这个过程叫做重排(回流)

添加或者删除可见的DOM元素;

元素尺寸改变——边距、填充、边框、宽度和高度

内容变化,比如用户在input框中输入文字

浏览器窗口尺寸改变——resize事件发生时

计算 offsetWidth 和 offsetHeight 属性

设置 style 属性的值

重绘

当一个元素外观发生改变,但没有改变布局,重新把元素外观绘制出来的过程,叫做重绘

重排优化

  1. 分离读写操作
  2. 样式集中改变(class)
  3. 使用 absolute 或 fixed 脱离文档流
  4. 优化动画

进程和线程

根本区别

进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位

web性能优化

  1. 尽量减少前端HTTP请求
  2. 浏览器缓存
  3. HTML代码结构优化
  4. 懒加载和预加载
举报

相关推荐

0 条评论