前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >小结ES6基本知识点(二)

小结ES6基本知识点(二)

原创
作者头像
前端林子
修改于 2019-09-01 14:23:37
修改于 2019-09-01 14:23:37
2.3K00
代码可运行
举报
文章被收录于专栏:前端技术总结前端技术总结
运行总次数:0
代码可运行

0,本文适合人群和主要内容

ES6初学者,通过阅读本文可对ES6知识点有个大体的概念,强烈建议阅读阮一峰大大的ES6入门

老司机可以直接绕路。

主要内容:

  • let、const命令
  • 解构赋值
  • 箭头函数
  • 模版字符串
  • 数组方法:map、filter、reduce
  • Symbol
  • Set和Map
  • Class
  • Module
  • Promise
  • async和await

上一篇文章总结了前五个部分的内容,可以点击阅读小结ES6基本知识点(一)本文将总结Symbol、Set和Map的有关内容。

1.Symbol

回忆下js中的5种原始类型:number、string、boolean、undefined、null。

在ES6中,新定义了Symbol这种原始类型,主要是为了代表一个独一无二的值(每一个 Symbol 值都是不相等的)

注意点:

  • Symbol是一种原始类型,不是对象。所以不要用new Symbol来生成Symbol。直接:Symbol(params) // params可以不传,为空;
  • Symbol(params)中的参数params可以是字符串类型的,表示对当前Symbol值的描述。不论是没传params,还是传了参数params,params相等或者不相等,Symbol函数的返回值是不相等的。
  • Symbol(params)中的参数params如果是一个对象,会先调用该对象的toString方法,将对象转为字符串,然后再生成一个Symbol值。
  • Symbol值可以转为布尔值(Boolean(xxx))、字符串(String(xxx)、xxx.toString())、但不能转为数组。

验证(1):

Symbol是一种原始类型

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let s = Symbol();
console.log(typeof s); // symbol

验证(2):

生成Symbol不能用new Symbol:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let s1 = new Symbol();
console.log(s1); // Uncaught TypeError: Symbol is not a constructor at new Symbol (<anonymous>)
let s1 = Symbol();
console.log(s1); // Symbol()

验证(3):

参数如果是对象且toString方法时,会调用对应的toString()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//参数是数组
let s1 = Symbol(["a", "b"])
console.log('s1', s1) // Symbol(a,b)

// 参数是对象--没有toString()
let s2 = Symbol({ "name": "Peter" })
console.log('s2', s2) //Symbol([object Object])

// 参数是对象--有toString()
const obj = {
    name:'peter',
    test(){
        return 'def'
    },
    toString() {
        return 'abc'
    },
};
const sym = Symbol(obj);
console.log(sym) // Symbol(abc)

验证(4):

每一个 Symbol 值都是不相等的,不论是否传参数、参数值是否相等:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            //无参数:
            let s1 = Symbol();
            let s2 = Symbol();
            console.log('s1===s2', s1 === s2); // s1===s2 false

            // 有参数、参数不相等:
            let s1 = Symbol("a");
            let s2 = Symbol("b");
            console.log('s1===s2', s1 === s2); // s1===s2 false
            
            // 有参数、参数相等
            let s1 = Symbol("a");
            let s2 = Symbol("a");
            console.log('s1===s2', s1 === s2); // s1===s2 false

验证(5)

Symbol值可以转为布尔值(Boolean(xxx))、字符串(String(xxx)、xxx.toString())、但不能转为数值、也不能和其他类型的值进行运算:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 let s1 = Symbol("test");
 console.log(s1.toString()); // Symbol(test)
 console.log(String(s1)); // Symbol(test)
 console.log(Boolean(s1)); // true
 console.log(Number(s1)); // Uncaught TypeError: Cannot convert a Symbol value to a number
 s1 + 1; // Uncaught TypeError: Cannot convert a Symbol value to a number
 s1 + "test"; // test.html:48 Uncaught TypeError: Cannot convert a Symbol value to a string

下面介绍Set和Map

Set:

类似数组,不同的是数组中元素是允许重复的,而Set里面的元素都是唯一的。可接受字符串、数组、对象等作为参数。

Map:

类似对象,不同的是对象中的key是字符串或数字,而Map中的key可以是任何数据类型。

2.Set

2.1 Set的基本用法

验证(1):

参数是数组,可以用于数组去重

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[...new Set(array)]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let s1 = new Set([1,2,3,4,4,4,4]);
console.log(s1); // Set(4) {1, 2, 3, 4}
console.log([...s1]); // [1, 2, 3, 4]

验证(2):

参数是字符串,也可以用于字符串去重

思路:[...new Set(“xxx”)]可得到去重后的数组,再通过.join(‘’)转成字符串,即可得到去重后的字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[...new Set(“xxx”)].join('')
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let s1 = new Set("abcddddd") 
console.log(s1); // Set(4) {"a", "b", "c", "d"}
console.log([...s1]); // ["a", "b", "c", "d"] 
console.log([...s1].join('')); // abcd

验证(3):

参数是对象,添加到Set时,不能直接new Set({a:1})这样写,这样会报错Uncaught TypeError。可以用Set的add方法来添加。且任意两个对象都是不相等的,包括两个空对象,也是不相等的。这意味着add两个空对象后,Set的size是2而不是1:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let s1 = new Set({a:1},{b:1}) // Uncaught TypeError: object is not iterable (cannot read property Symbol(Symbol.iterator))
console.log(s1);
let s2 = new Set();
// s2.add({a:1}).add({b:1})
s2.add({}).add({})
console.log(s2.size) // 2

验证(4):

Set内部判断相等类似“===”,不过“===”认为NaN和任何值都不相等,Set内部则会认为NaN等于自身。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//Set 内部判断两个值会认为:“4”和4是不相等的
let s1 = new Set([1,2,3,4,4,4,"4"]);
console.log([...s1]); // [1, 2, 3, 4, "4"]
// set 内部判断两个值会认为:NaN和自身相等
let s2 = new Set([1,2,3,4,4,4,NaN,NaN])
console.log([...s2]); // [1, 2, 3, 4, NaN]

2.2 Set实例的属性和方法

  • 属性:

size:获取元素的数量

  • Set的操作方法:

Set的操作方法

用途

返回值

add(value)

添加元素

返回Set实例本身

delete(value)

删除元素

返回一个布尔值,表示是否删除成功

has(value)

判断是否有该元素

返回一个布尔值,表示是否是Set实例的元素

clear()

清除所有元素

没有返回值

验证:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let s1 = new Set();
s1.add(1).add(2).add(3).add(3);
s1.size // 3
s1.has(1) // true
s1.has(4) // false
s1.delete(1)
s1.has(1) // false
s1.clear()
s1.size // 0
  • 遍历方法:

keys():返回键名的遍历器

values():返回键值的遍历器。由于Set结构没有键名,只有键值(或者说键名和键值是同一个值),所有keys()和values()返回结果是一样的。

entries():返回键值对的遍历器

forEach():使用回调函数对每个元素执行某种操作,没有返回值。

验证:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let s = new Set(['name', 'age', 'gender'])
for (let i of s.keys()) {
    console.log(i)
    // name
    // age
    // gender
}
for (let i of s.values()) {
    console.log(i)
    // name
    // age
    // gender
}
for (let i of s.entries()) {
    console.log(i)
    // ["name","name"]
    // ["age","age"]
    // ["gender","gender"]
}
s.forEach((key, value) => console.log(key + ":" + value))
    // name:name
    // age:age
    // gender:gender

3.Map

3.1基本用法

验证:用对象和数组当做键:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 对象当做键
let m = new Map();
let obj = {'test':'abc'};
m.set(obj,'def')

// 数组当做键
let arr = ["a","b","c"];
m.set(arr,'d')
console.log(m)

结果:

3.2Map实例的属性和方法

  • 属性

size:获取元素的数量

  • 操作方法

Map的操作方法

用途

返回值

set(key,value)

设置元素key和value

返回Map实例本身

get(key)

获取key对应的键值

返回键对应的键值,没有则返回undefined

has(value)

判断是否有value这个键

返回一个布尔值

delete(value)

删除value这个键

返回一个布尔值,表示是否删除成功

clear()

清除所有元素

没有返回值

验证:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let m = new Map();
m.set("name","Peter");
m.set("age", 26)
m.set({"gender":"male","add":"street"},"other info")
m.size // 3
m.get('name') // Peter
m.has("age") // true
m.delete("age")
m.has("age") // false
m.clear();
m.size // 0
  • 遍历方法

keys():返回键名的遍历器

values():返回键值的遍历器。

entries():返回键值对的遍历器

forEach():使用回调函数对每个元素执行某种操作,没有返回值。

验证:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let m = new Map();
m.set("name", "Peter");
m.set("age", 26)
m.set({ "gender": "male", "add": "street" }, "other info")
for (let key of m.keys()) {
    console.log(key);
    // name
    // age
    // {gender: "male",add: "street"}
}
for (let value of m.values()) {
    console.log(value)
    // Peter
    // 26
    // other info
}
for (let i of m.entries()) {
    console.log(i)
    // ["name", "Peter"]
    // ["age", 26]
    // [{gender: "male", add: "street"},"other info"]
}
m.forEach((value, key) => console.log(key + ":" + value))
    // name:Peter
    // age:26
    // [object Object]:other info

注意下这个Map的forEach()方法,第一个参数是键值,第二个参数是键。

4.小结

本文的主要内容是总结了ES6中新增的原始数据类型Symbol、新增的数据结构Set和Map的常用知识点。在下一节中会总结关于class和Module的有关内容。如有问题,欢迎指正。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
ARM 版 Kylin V10 部署 KubeSphere v3.4.0 不完全指南
本文介绍了如何在 麒麟 V10 aarch64 架构服务器上部署 KubeSphere 和 Kubernetes 集群。我们将使用 KubeSphere 开发的 KubeKey 工具实现自动化部署,在三台服务器上实现高可用模式最小化部署 Kubernetes 集群和 KubeSphere。
运维有术
2023/11/09
1.4K1
ARM 版 Kylin V10 部署 KubeSphere v3.4.0 不完全指南
ARM 版 OpenEuler 22.03 部署 KubeSphere v3.4.0 不完全指南(2)
本文是 ARM 版 OpenEuler 22.03 部署 KubeSphere v3.4.0 不完全指南 的续集,受限于字符数量限制,无奈只能将完整的文档拆成了两篇。
运维有术
2023/10/19
9310
ARM 版 OpenEuler 22.03 部署 KubeSphere v3.4.0 不完全指南(2)
KubeSphere 最佳实战:一文搞定 KubeKey v3.1.1 离线部署 KubeSphere v3.4.1 和 Kubernetes v1.28
今天分享的内容是 KubeSphere 最佳实战「2024」 系列文档中的 一文搞定 KubeKey v3.1.1 离线部署 KubeSphere v3.4.1 和 Kubernetes v1.28。
运维有术
2024/05/21
1K2
KubeSphere 最佳实战:一文搞定 KubeKey v3.1.1 离线部署 KubeSphere v3.4.1 和 Kubernetes v1.28
KubeKey 离线部署 KubeSphere v3.4.1 和 Kubernetes v1.26 实战指南
KubeKey 从 v2.1.0 版开始新增了清单 (manifest) 和制品 (artifact) 的概念,为用户离线部署 KubeSphere 和 Kubernetes 集群提供了一种简单便捷的解决方案。
运维有术
2023/12/13
2.1K0
KubeKey 离线部署 KubeSphere v3.4.1 和 Kubernetes v1.26 实战指南
信创:鲲鹏(arm64)+麒麟(kylin v10)离线部署k8s和kubesphere(含离线部署新方式)
先说新方式结论:不论什么CPU架构和操作系统,只要在线能安装的,统统都可以离线安装的。
编码如写诗
2024/08/30
1.4K0
信创:鲲鹏(arm64)+麒麟(kylin v10)离线部署k8s和kubesphere(含离线部署新方式)
手把手教你离线部署 KubeSphere v4.1.2 和 k8s v1.30.6,超详细指南!
今天分享的主题是:如何在离线环境部署 Kubernetes v1.30.6 和 KubeSphere v4.1.2 高可用集群。
运维有术
2025/01/22
1.4K2
手把手教你离线部署 KubeSphere v4.1.2 和 k8s v1.30.6,超详细指南!
手把手教你离线部署 KubeSphere v4.1.2 和 k8s v1.30.6,超详细指南!
今天分享的主题是:如何在离线环境部署 Kubernetes v1.30.6 和 KubeSphere v4.1.2 高可用集群。
运维有术
2025/01/22
1.2K0
手把手教你离线部署 KubeSphere v4.1.2 和 k8s v1.30.6,超详细指南!
信创:海光(x86)+银河麒麟(kylin v10)离线部署k8s和KubeSphere(一)
本文介绍如何在麒麟 V10 X86_64 架构服务器上制作制品和离线部署 KubeSphere 和 Kubernetes 集群。x86机器部署ks,镜像基本没有变化。主要区别在于各操作系统k8s初始化的依赖包和KubeKey用到的repository有区别。本文将详细记录制品制作和离线部署过程。
编码如写诗
2024/08/30
1.3K0
信创:海光(x86)+银河麒麟(kylin v10)离线部署k8s和KubeSphere(一)
鲲鹏(arm64)+麒麟V10离线部署KubeSphere3.4.1(离线包在Windows制作 精简版)
进入E:\KubeSphere后打开终端(cmd),输入wsl后进入子系统,创建arm目录
编码如写诗
2024/09/17
6901
鲲鹏(arm64)+麒麟V10离线部署KubeSphere3.4.1(离线包在Windows制作 精简版)
KubeSphere 最佳实战:征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
近期,KubeSphere 社区的讨论中频繁出现关于 Docker 官方镜像仓库访问受限的问题。 尽管用户尝试通过设置 KKZONE=cn 来解决,但部署 KubeSphere 时仍面临失败的情况。
运维有术
2024/07/29
9480
KubeSphere 最佳实战:征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
最新 KubeKey 3.1.5 离线部署KubeSphere 3.4.1+k8s(更容易了)
点击公众号关注后,回复ks3.4离线包获取 本文制品和镜像。有任何问题可点击联系我,添加微信进行咨询和反馈。
编码如写诗
2024/08/30
1K0
最新 KubeKey 3.1.5 离线部署KubeSphere 3.4.1+k8s(更容易了)
KubeSphere 最佳实战:征服 Docker 镜像访问限制:单节点 KubeSphere v3.4.1 部署攻略
KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统,完全开源,支持多云与多集群管理,提供全栈的 IT 自动化运维能力,简化企业的 DevOps 工作流。
运维有术
2024/07/29
4670
KubeSphere 最佳实战:征服 Docker 镜像访问限制:单节点 KubeSphere v3.4.1 部署攻略
KubeKey 升级 KubeSphere 和 Kubernetes 补丁版本实战指南
KubeSphere v3.4.1 已于 2023 年 11 月 10 日正式发布,升级说明详见 Releases-v3.4.1 发布说明。该发布版修复了 v3.4.0 中存在的许多问题,建议所有人更新。
运维有术
2023/12/05
5570
KubeKey 升级 KubeSphere 和 Kubernetes 补丁版本实战指南
【信创-k8s】重磅-鲲鹏arm+麒麟V10离线部署k8s1.30+kubesphere4.1.3
随着信创产业的推进,鲲鹏arm64架构得以快速发展。而由于信创领域的主要客户通常部署在内网环境中,这使得离线部署成为该架构方案实施过程中不可或缺的关键环节。
编码如写诗
2025/06/11
1820
【信创-k8s】重磅-鲲鹏arm+麒麟V10离线部署k8s1.30+kubesphere4.1.3
KubeSphere 最佳实战:KubeKey 部署 Kubernetes v1.28.8 实战
今天分享的内容是 KubeSphere 最佳实战「2024」 系列文档中的 KubeKey 部署 Kubernetes v1.28.8 实战。
运维有术
2024/04/25
6670
KubeSphere 最佳实战:KubeKey 部署 Kubernetes v1.28.8 实战
KubeSphere 最佳实战:14 张高清大图带你抢先体验 KubeSphere v4.1.1, AIO 部署全攻略
2024年 9月 9号,备受广大网友期待的 KubeSphere v4 终于在GitHub 代码仓库发布了正式的代码,而且是直接越过了 v4.0 直接发布的 v4.1.1。
运维有术
2024/09/14
5110
KubeSphere 最佳实战:14 张高清大图带你抢先体验 KubeSphere v4.1.1, AIO 部署全攻略
KubeSphere 最佳实战:KubeKey 助力 Kubernetes 扩容控制节点实战指南
在近期的技术分享中,我们实战讨论了Kubernetes 集群 Worker 节点的扩容。文章发布后,我收到了社区成员的反馈,询问控制节点的扩容是否可行。我的回答是:绝对可以。
运维有术
2024/07/29
2590
KubeSphere 最佳实战:KubeKey 助力 Kubernetes 扩容控制节点实战指南
告别宕机!KubeSphere v4.1.3 联手 K8s v1.32.5,手把手教你打造“永不掉线”的云原生底座
各位读者,好久不见,我是术哥,那个带你玩转 KubeSphere 实战的我又回来了!
运维有术
2025/06/16
2110
告别宕机!KubeSphere v4.1.3 联手 K8s v1.32.5,手把手教你打造“永不掉线”的云原生底座
KubeSphere 最佳实战:征服 Docker 镜像访问限制:KubeSphere v3.4.1 成功部署全攻略
近期,KubeSphere 群里讨论中频繁出现关于 Docker 官方镜像仓库访问受限的问题。 尽管用户尝试通过设置 KKZONE=cn 来解决,但部署 KubeSphere 时仍面临失败的情况。
运维有术
2024/07/18
4390
KubeSphere 最佳实战:征服 Docker 镜像访问限制:KubeSphere v3.4.1 成功部署全攻略
KubeSphere 最佳实战:征服 Docker 镜像访问限制:单节点 KubeSphere v3.4.1 部署攻略
KubeSphere 是在 Kubernetes 之上构建的面向云原生应用的分布式操作系统,完全开源,支持多云与多集群管理,提供全栈的 IT 自动化运维能力,简化企业的 DevOps 工作流。
运维有术
2024/07/19
5020
KubeSphere 最佳实战:征服 Docker 镜像访问限制:单节点 KubeSphere v3.4.1 部署攻略
推荐阅读
ARM 版 Kylin V10 部署 KubeSphere v3.4.0 不完全指南
1.4K1
ARM 版 OpenEuler 22.03 部署 KubeSphere v3.4.0 不完全指南(2)
9310
KubeSphere 最佳实战:一文搞定 KubeKey v3.1.1 离线部署 KubeSphere v3.4.1 和 Kubernetes v1.28
1K2
KubeKey 离线部署 KubeSphere v3.4.1 和 Kubernetes v1.26 实战指南
2.1K0
信创:鲲鹏(arm64)+麒麟(kylin v10)离线部署k8s和kubesphere(含离线部署新方式)
1.4K0
手把手教你离线部署 KubeSphere v4.1.2 和 k8s v1.30.6,超详细指南!
1.4K2
手把手教你离线部署 KubeSphere v4.1.2 和 k8s v1.30.6,超详细指南!
1.2K0
信创:海光(x86)+银河麒麟(kylin v10)离线部署k8s和KubeSphere(一)
1.3K0
鲲鹏(arm64)+麒麟V10离线部署KubeSphere3.4.1(离线包在Windows制作 精简版)
6901
KubeSphere 最佳实战:征服 Docker 镜像访问限制!KubeSphere v3.4.1 成功部署全攻略
9480
最新 KubeKey 3.1.5 离线部署KubeSphere 3.4.1+k8s(更容易了)
1K0
KubeSphere 最佳实战:征服 Docker 镜像访问限制:单节点 KubeSphere v3.4.1 部署攻略
4670
KubeKey 升级 KubeSphere 和 Kubernetes 补丁版本实战指南
5570
【信创-k8s】重磅-鲲鹏arm+麒麟V10离线部署k8s1.30+kubesphere4.1.3
1820
KubeSphere 最佳实战:KubeKey 部署 Kubernetes v1.28.8 实战
6670
KubeSphere 最佳实战:14 张高清大图带你抢先体验 KubeSphere v4.1.1, AIO 部署全攻略
5110
KubeSphere 最佳实战:KubeKey 助力 Kubernetes 扩容控制节点实战指南
2590
告别宕机!KubeSphere v4.1.3 联手 K8s v1.32.5,手把手教你打造“永不掉线”的云原生底座
2110
KubeSphere 最佳实战:征服 Docker 镜像访问限制:KubeSphere v3.4.1 成功部署全攻略
4390
KubeSphere 最佳实战:征服 Docker 镜像访问限制:单节点 KubeSphere v3.4.1 部署攻略
5020
相关推荐
ARM 版 Kylin V10 部署 KubeSphere v3.4.0 不完全指南
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档