javascript深入JavaScript

深入JavaScript Day16、17 - Set、Weak

2022-01-21  本文已影响0人  望穿秋水小作坊

一、Day16

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

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

3、Map 和 Object 有什么异同?

4、Map 和 WeakMap的区别?

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函数有什么作用?(要能回忆起基本用法)

image.png

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

image.png

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

image.png

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

image.png
上一篇 下一篇

猜你喜欢

热点阅读