高阶指南

在进入 Vue 3 组合 API,深入响应式之前,我们需要搞懂 ES6 出现的几个 API,其中包含以下几个

map

weakMap

set

weakSet

proxy

reflect

如果不知道的小伙伴,可以自行到 MDN 进行查阅。

Map

简单来说就是用于保存键值对对象,能够记住键的原始插入顺序,对于 key 来说,任何值都可以作为一个 key,或者 value。

我们都知道,Map 是一个构造函数,也就是传统的面向对象编程的类的概念,所以可以通过以下方式来创建 map 实例:

new Map()

属性

Map.length

属性 length 的值为 0 。想要计算一个Map 中的条目数量, 使用 Map.prototype.size.

Map.prototype.size

返回Map对象的键/值对的数量

new Map().size

方法

Map.prototype.clear()

移除Map对象的所有键/值对 。

Map.prototype.delete(key)

如果 Map 对象中存在该元素,则移除它并返回 true;否则如果该元素不存在则返回 *false*。随后调用 Map.prototype.has(key) 将返回 false 。

Map.prototype.entries()

返回一个新的 Iterator 对象,它按插入顺序包含了Map对象中每个元素的 「[key, value]」 **数组**。

Map.prototype.forEach(callbackFn[, thisArg])

按插入顺序,为 Map对象里的每一键值对调用一次callbackFn函数。如果为forEach提供了thisArg,它将在每次回调中作为this值。

Map.prototype.get(key)

返回键对应的值,如果不存在,则返回undefined。

Map.prototype.has(key)

返回一个布尔值,表示Map实例是否包含键对应的值。

Map.prototype.keys()

返回一个新的 Iterator对象, 它按插入顺序包含了Map对象中每个元素的「键」 。

Map.prototype.set(key, value)

设置Map对象中键的值。返回该Map对象。

Map.prototype.values()

返回一个新的Iterator对象,它按插入顺序包含了Map对象中每个元素的「值」 。

实例

使用 Map 对象

let myMap = new Map();

let keyObj = {};

let keyFunc = function(){};

let keyString = 'a string';

添加 key

myMap.set(keyString, "Ken")

myMap.set(keyObj, 'Ken')

myMap.set(keyFunc,"ken")

size 获取

myMap.size;

读取值

myMap.get(keyFunc)

myMap.get(keyString)

myMap.get(keyObj)

将 NaN 作为 Map 的 key

NaN 也可以作为Map对象的键。虽然 NaN 和任何值甚至和自己都不相等(NaN !== NaN 返回true),但下面的例子表明,NaN作为Map的键来说是没有区别的:

myMap.set(NaN, 'not a number')

myMap.get(NaN)

let otherNaN = Number('foo')

myMap.get(otherNaN)

使用 for .. of 方法来迭代 Map

Map可以使用for..of循环来实现迭代:

for(let [key, value] of myMap) {

console.log(key + " = " + value)

}

循环 keys

for (let key of myMap.keys()) {

console.log(key);

}

循环 values

for (let value of myMap.values()) {

console.log(value);

}

循环 entries

for (let [key, value] of myMap.entries()) {

console.log(key + " = " + value);

}

使用 forEach() 方法迭代 Map

Map也可以通过forEach()方法迭代:

myMap.forEach(function(value, key){

console.log(key + " = " + value);

})

Map 与数组的关系

let kvArray = [["key1", "value1"], ["key2", "value2"]]

let map = new Map(kvArray)

map.get('key1')

map.get("key2")

console.log(map)

console.log(Array.from(map))

console.log([...map])

Array.from(map.keys())

Array.from(map.values())

Array.from(map.entries())

复制或合并 Maps

map 能像数组一样被复制:

let original = new Map([

[1, 'one']

]);

let clone = new Map(original);

console.log(clone.get(1)); // one

console.log(original === clone); // false. 浅比较 不为同一个对象的引用

Map 对象间可以进行合并,但是会保持键的唯一性。

let first = new Map([

[1, 'one'],

[2, 'two'],

[3, 'three'],

]);

let second = new Map([

[1, 'uno'],

[2, 'dos']

]);

// 合并两个Map对象时,如果有重复的键值,则后面的会覆盖前面的。

// 展开运算符本质上是将Map对象转换成数组。

let merged = new Map([...first, ...second]);

console.log(merged.get(1)); // uno

console.log(merged.get(2)); // dos

console.log(merged.get(3)); // three

Map对象也能与数组合并:

let first = new Map([

[1, 'one'],

[2, 'two'],

[3, 'three'],

]);

let second = new Map([

[1, 'uno'],

[2, 'dos']

]);

// Map对象同数组进行合并时,如果有重复的键值,则后面的会覆盖前面的。

let merged = new Map([...first, ...second, [1, 'eins']]);

console.log(merged.get(1)); // eins

console.log(merged.get(2)); // dos

console.log(merged.get(3)); // three

删除与判断

let myMap = new Map()

myMap.set('bla','blaa')

myMap.set('bla2','blaa2')

console.log(myMap) // Map { 'bla' => 'blaa', 'bla2' => 'blaa2' }

myMap.has('bla') // true

myMap.delete('bla') // true

console.log(myMap) // Map { 'bla2' => 'blaa2' }

python入门指南bl-Vue 3 高阶指南之 Map相关推荐

  1. python阶乘匿名函数_python的高阶函数与匿名函数

    一.高阶函数的定义 高阶函数:就是把函数当成参数传递的一种函数,例如: defadd(x,y,f):return f(x)+f(y)print(add(-8,11,abs) 结果:19 解释: 1.调 ...

  2. python中高阶函数map怎么用_python六十课——高阶函数之map

    1.高阶函数: 特点:函数的形参位置必须接受一个函数对象 分类学习: 1).map(fn,lsd1,[lsd2...]): 参数一:fn --> 函数对象 参数二:lsd1 --> 序列对 ...

  3. gdb调试lua_gdb 调试入门,大牛写的高质量指南

    原标题:gdb 调试入门,大牛写的高质量指南 (点击上方公众号,可快速关注) 来源: 伯乐在线 - 道法子 如需转载,发送「转载」二字查看说明 没想到Brendan Gregg这样的大牛,会写出这样一 ...

  4. python在匿名函数作和_跟光磊学Python开发-匿名函数函数和高阶函数

    跟光磊学Python开发-匿名函数函数和高阶函数 跟光磊学Python开发-匿名函数函数和高阶函数跟光磊学Python开发 匿名函数 匿名函数就是函数定义时没有名字的函数,也称为匿名表达式. 普通函数 ...

  5. 一文看懂Python(八)-----内置高阶函数用法总结

    函数是Python的核心内容之一,能够提高代码的重复利用率.为了更好的使用函数,有必要了解函数的一些高级用法. Python内置了三个高阶函数:所谓高阶函数就是以函数作为参数,或者返回一个函数的函数, ...

  6. Python学习之Part09.高阶函数filter(),map(),reduce(),sorted()

    1.高阶函数 一个函数作为参数传给另外一个函数: 一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归) # abs()用来求一个数的绝对值 # 将abs函数赋值,则f==abs f = a ...

  7. 写一个组织架构图组件来深入认识vue函数式高阶组件

    本文涉及到的知识点: Vue函数式组件 递归函数 深拷贝对象 正则匹配 近期在开发一个vue组织架构图组件时,为了实现高性能渲染和一些特殊用法,使用了函数式组件,要实现的效果是这样: 写一个组织架构图 ...

  8. Python学习笔记__4.1章 高阶函数

    # 这是学习廖雪峰老师python教程的学习笔记 1.概览 我们知道Python内置的求绝对值的函数是abs() # 调用abs()函数可以获得一个值 >>> abs(-10) 10 ...

  9. python高级语法-高阶函数之map的使用方法

    python标准库内置了不少常用的高阶函数. 这里简单介绍一下比较实用的几个的用法. 首先,什么叫高阶函数? 高阶函数,把函数作为参数的函数,这是源于python中函数可以像变量一样赋值等操作,这是其 ...

最新文章

  1. itmz文件如何打开_如何使用proteus8打开低版本proteus7的仿真文件?
  2. 2012年初二晚越秀公园游灯有感一二
  3. Leetcode题库 2038.邻色同删(双指针法 C实现)
  4. 2020年十月下旬,再次更新了自己的linkedin工作经历
  5. centos一键清理磁盘空间_如何清理 Docker 占用的磁盘空间
  6. P3175 [HAOI2015]按位或
  7. vscode 添加库头文件_VSCode配置C/C++并添加非工作区头文件的方法
  8. Newtonsoft 六个超简单又实用的特性【上下篇】
  9. linux 安装qq2014,Ubuntu14.04安装wine QQ
  10. 假程序员启示录:房价
  11. 格力2代,原厂固件hola1.2.2
  12. 人在世、多交人,为人处事要留神
  13. XTU 程序设计实践模拟考试题1
  14. 【jQuery】基础知识梳理笔记
  15. 【Linux】通过Mac终端连接虚拟机(ssh root@192.168.31.230)
  16. 学习云计算技术前景在哪里?云计算技术发展趋势
  17. 阿里巴巴按关键字搜索新品数据 API
  18. python中description_python中cursor.description什么意思
  19. dizcuz手机API-mobile
  20. python 如何将负数转换为正数

热门文章

  1. heapq 对有序的数组列表进行整体排序
  2. python berkeley DB操作——打开btree索引文件中的database
  3. SQLALchemy 从数据库导出model
  4. 关于Eclispse连接Mysql的Jdbc
  5. ABAP Netweaver和Hybris Enterprise Commerce Platform的登录认证
  6. 省略号和可变参数模板
  7. rtc关机闹钟6 AlarmManagerService研究
  8. .NET平台BigO算法复杂度备忘
  9. Android学习笔记(十一):Activity-ListView
  10. MySQL DDL--MySQL 5.7版本Online DDL操作