初识Map,Set

这篇博客探讨了JavaScript中的Map, Set与Object的区别,包括它们的创建与使用。此外,还涉及到了CSS的居中技巧、盒模型、垃圾回收机制以及JS执行机制、异步编程和浏览器性能优化等主题。" 138159384,8734938,普元EOS Platform eos.jmx 远程代码执行漏洞分析与复现,"['安全', 'web安全', '企业级应用开发平台', '漏洞分析', '修复方案']

记录了一些有关Set Map Object的学习,以及一些最近学习的css和Promise

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. 懒加载和预加载
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值