es6(四):Symbol,Set,Map

1.Symbol:

Symbol中文意思“象征”

Symbol:这是一种新的原始类型的值,表示独一无二的值(可以保证不与其它属性名冲突)

Symbol()函数前面不能使用new,因为生成的Symbol(下面指s)是一个原始类型的值,不是对象

1 let s=Symbol()
2     console.log(typeof s)//symbol

Symbol可以接受一个字符串作为参数,作为对Symbol的描述

1 let s1=Symbol('s1')
2     let s2=Symbol('s1')
3     //Symbol是独一无二的值,所以进行比较返回的永远是false
4     console.log(s1===s2)

Symbol的主要运用场景之一对象属性名不会产生覆盖

1 let name1=Symbol()
2     let obj={
3       name1:'apple',//此处name1是字符串
4       [name1]:'blue'//Symbol的name1在对象中必须用中括号括起来,否则被认为是字符串
5     }
6     console.log(obj.name1,obj['name1'],obj[name1])//前面两种是获取apple写法,后面是获取Symbol(即blue)的写法

2.Set:新的数据结构,类似数组,但是成员的值是唯一的(所以可以用来去重)

Set本身是一个构造函数

 1 console.log(new Set([1,2,3,2,3]))
 2     let a=new Set();//此处加上分号,因为下面这行代码以[]开头
 3     [1,2,3,2,3,'2','3'].forEach(element => {
 4       a.add(element)
 5     });
 6     //此处说明Set内部使用的是严格相等运算符===
 7     console.log(a)//Set(5) {1, 2, 3, "2", "3"}
 8     for(let i of a){
 9       console.log(i,typeof i)
10     }

实际上Set函数接收的参数不仅仅是数组,是可迭代(iterable)的数据结构【类似Python】

同时注意:两个空对象不严格相等(引用的内存地址不同),所以Set里面可以加入多个空对象

1 console.log({}==={})
2     let b=new Set()
3     b.add({})
4     b.add({})
5     console.log(b,b.size)//Set(2) {{…}, {…}} 2

Set实例方法add(value),delete(value),has(value),clear()

Set实例属性Set.prototype.constructor(默认就是Set本身)    Set.prototype.size:Set包含元素个数

1 let c=new Set()
2     c.add(1).add(2).add(3).add(2)
3     console.log(c)//Set(3) {1, 2, 3}
4     c.delete(2)
5     console.log(c)//Set(2) {1, 3}
6     console.log(c.has(2))//false
7     c.clear()//清空所有值
8     console.log(c)//Set(0) {}

3.Map"值对值"的对应 对比传统的对象 "字符串对值"的对应

 1 let m=new Map([
 2       [1,10],
 3       [true,'100']
 4     ])
 5     console.log(m)//Map(2) {1 => 10, true => "100"}
 6 
 7     console.log(m.size)//2
 8     console.log(m.has(1))//true
 9     console.log(m.get(true))//100
10     m.set(1,100)
11     console.log(m)//Map(2) {1 => 100, true => "100"}

也就是说Map的键不像对象的键只是字符串map的键可以是字符串,布尔值,数值等类型

Map更符合hash结构

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏码匠的流水账

聊聊flink的PartitionableListState

flink-runtime_2.11-1.7.0-sources.jar!/org/apache/flink/runtime/state/DefaultOper...

1434
来自专栏WindCoder

Python Class Attributes: An Overly Thorough Guide

I had a programming interview recently, a phone-screen in which we used a collab...

711
来自专栏猿人谷

编程小技巧

1.判断一个自然数是否是某个数的平方?(其实就是判断这个数一定是奇数相加的) 由于 (n+1)^2 =n^2 + 2n + 1, = ... = 1 +...

21610
来自专栏深度学习计算机视觉

蓝桥杯试题算法学习笔记一题目

题目 1、熊怪吃核桃 森林里有一只熊怪,很爱吃核桃。不过它有个习惯,每次都把找到的核桃分成相等的两份,吃掉一份,留一份。如果不能等分,熊怪就会扔掉一个核桃再分。...

5206
来自专栏陈树义

注解的那些事儿(三)| 注解的使用

在上面的 SweetDemo 中会发现我们在使用 @Sweet 注解的时候,手动给 sweetLevel 属性赋值。如果没有赋值,那么会报错。

1152
来自专栏向治洪

Ecmascript语法之Symbol

Symbol 概述 作为属性名的Symbol 实例:消除魔术字符串 属性名的遍历 Symbol.for(),Symbol.keyFor() 实例:模块的 Sin...

2189
来自专栏Ryan Miao

jackson简单使用,对象转json,json转对象,json转list

添加jackson依赖: // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/ja...

46211
来自专栏java初学

spring框架(3)— spring集合类的注入

1233
来自专栏算法修养

ZOJ 3605 Find the Marble(dp)

Find the Marble ---- Time Limit: 2 Seconds      Memory Limit: 65536 KB ---- Alic...

3717
来自专栏函数式编程语言及工具

Scalaz(34)- Free :算法-Interpretation

我们说过自由数据结构(free structures)是表达数据类型的最简单结构。List[A]是个数据结构,它是生成A类型Monoid的最简单结构,因为我们...

2136

扫码关注云+社区

领取腾讯云代金券