美文网首页javascript深入JavaScript
深入JavaScript Day16、17 - Set、Weak

深入JavaScript Day16、17 - Set、Weak

作者: 望穿秋水小作坊 | 来源:发表于2022-01-21 08:33 被阅读0次

一、Day16

1、Array和Set最大的区别是什么?Set常见应用是什么?

  • 【区别】Set不能存储重复元素
  • 【应用】Set常用于数组去重

2、WeakSet 和 Set有哪两个主要区别?

  • 【区别一】WeakSet中只能存放对象类型,不能存放基本数据类型;
  • 【区别二】WeakSet对元素的引用是弱引用,如果没有其他引用对某个对象进行引用,那么GC可以对该对象进行回收;

3、Map 和 Object 有什么异同?

  • 【同】Map和Object底层都是HashTable的实现的,用于存储键值对
  • 【异】Object的key只能是字符串,Map的key可以是对象类型。

4、Map 和 WeakMap的区别?

  • 【区别一】WeakMap的key只能使用对象,不接受其他类型作为key;
  • 【区别二】WeakMap的key对对象的引用是弱引用,如果没有其他引用引用这个对象,那么GC可以回收该对象;

5、Array中判断某个元素是否存在?

image.png

6、【重点】借助Map和WeakMap,实现响应式原理的后半段代码(注意思想)?

  • 【核心思想】让对象的属性和方法进行绑定;当对象的属性改变时,能拿出绑定的方法进行调用即可。
// 应用场景(vue3响应式原理)
const obj1 = {
  name: "why",
  age: 18
}

function obj1NameFn1() {
  console.log("obj1NameFn1被执行")
}

function obj1NameFn2() {
  console.log("obj1NameFn2被执行")
}

function obj1AgeFn1() {
  console.log("obj1AgeFn1")
}

function obj1AgeFn2() {
  console.log("obj1AgeFn2")
}

const obj2 = {
  name: "kobe",
  height: 1.88,
  address: "广州市"
}

function obj2NameFn1() {
  console.log("obj1NameFn1被执行")
}

function obj2NameFn2() {
  console.log("obj1NameFn2被执行")
}

// 1.创建WeakMap
const weakMap = new WeakMap()

// 2.收集依赖结构
// 2.1.对obj1收集的数据结构
const obj1Map = new Map()
obj1Map.set("name", [obj1NameFn1, obj1NameFn2])
obj1Map.set("age", [obj1AgeFn1, obj1AgeFn2])
weakMap.set(obj1, obj1Map)

// 2.2.对obj2收集的数据结构
const obj2Map = new Map()
obj2Map.set("name", [obj2NameFn1, obj2NameFn2])
weakMap.set(obj2, obj2Map)

// 3.如果obj1.name发生了改变
// Proxy/Object.defineProperty
obj1.name = "james"
const targetMap = weakMap.get(obj1)
const fns = targetMap.get("name")
fns.forEach(item => item())


二、Day17

1、【重要】数组的flat、flatMap函数有什么作用?(要能回忆起基本用法)

  • 【核心】flat是平铺的意思,就是将数组中的数组,平铺开来
image.png

2、如何在JavaScript中表示比较大的数值?

  • 使用 【BigInt】数据类型
image.png

3、【重要】为什么需要出现空值合并运算符?如何只用空值合并运算符?

  • 在ES11之前,const result1 = foo || "默认值",这种方式存在缺陷,当 foo==="" 或 foo===0 时,就会出现不如人意的表现,所以出现了空值合并运算符。
image.png

4、【重要】为什么会出现可选链?可续了的基本使用?

  • 可选链的出现,大大降低了我们对异常值的处理效率,代码变得更加简洁而优雅
image.png

相关文章

网友评论

    本文标题:深入JavaScript Day16、17 - Set、Weak

    本文链接:https://www.haomeiwen.com/subject/jfrjhrtx.html