1.Symbol:

Symbol中文意思“象征”

Symbol:这是一种新的原始类型的值,表示独一无二的值(可以保证不与其它属性名冲突)
Symbol()函数前面不能使用new,因为生成的Symbol(下面指s)是一个原始类型的值,不是对象
 let s=Symbol()
console.log(typeof s)//symbol
 
Symbol可以接受一个字符串作为参数,作为对Symbol的描述
 let s1=Symbol('s1')
let s2=Symbol('s1')
//Symbol是独一无二的值,所以进行比较返回的永远是false
console.log(s1===s2)
Symbol的主要运用场景之一对象属性名不会产生覆盖
 let name1=Symbol()
let obj={
name1:'apple',//此处name1是字符串
[name1]:'blue'//Symbol的name1在对象中必须用中括号括起来,否则被认为是字符串
}
console.log(obj.name1,obj['name1'],obj[name1])//前面两种是获取apple写法,后面是获取Symbol(即blue)的写法

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

Set本身是一个构造函数
 console.log(new Set([1,2,3,2,3]))
let a=new Set();//此处加上分号,因为下面这行代码以[]开头
[1,2,3,2,3,'2','3'].forEach(element => {
a.add(element)
});
//此处说明Set内部使用的是严格相等运算符===
console.log(a)//Set(5) {1, 2, 3, "2", "3"}
for(let i of a){
console.log(i,typeof i)
}
实际上Set函数接收的参数不仅仅是数组,是可迭代(iterable)的数据结构【类似Python】
 
同时注意:两个空对象不严格相等(引用的内存地址不同),所以Set里面可以加入多个空对象
 console.log({}==={})
let b=new Set()
b.add({})
b.add({})
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包含元素个数
 let c=new Set()
c.add(1).add(2).add(3).add(2)
console.log(c)//Set(3) {1, 2, 3}
c.delete(2)
console.log(c)//Set(2) {1, 3}
console.log(c.has(2))//false
c.clear()//清空所有值
console.log(c)//Set(0) {}

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

 let m=new Map([
[1,10],
[true,'100']
])
console.log(m)//Map(2) {1 => 10, true => "100"} console.log(m.size)//
console.log(m.has(1))//true
console.log(m.get(true))//
m.set(1,100)
console.log(m)//Map(2) {1 => 100, true => "100"}
也就是说Map的键不像对象的键只是字符串map的键可以是字符串,布尔值,数值等类型
Map更符合hash结构
 

es6(四):Symbol,Set,Map的更多相关文章

  1. ES6中Set 和 Map用法

    JS中Set与Map用法 一.Set 1.基本用法 ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. ...

  2. es6的Set和Map数据结构

    Set 和 Map 数据结构 Set WeakSet Map WeakMap Set § ⇧ 基本用法 ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set ...

  3. ES6之Symbol

    ES6中Symbol是为了防止属性名冲突而引入的,是独一无二的.Symbol值是通过Symbol函数生成.Symbol值不能与其他类型的值运算否则会报错且Symbol的值可以转换为字符串或者是布尔值但 ...

  4. 前端笔记之React(六)ES6的Set和Map&immutable和Ramda和lodash&redux-thunk

    一.ES6的Set.Map数据结构 Map.Set都是ES6新的数据结构,都是新的内置构造函数,也就是说typeof的结果,多了两个: Set 是不能重复的数组 Map 是可以任何东西当做键的对象 E ...

  5. [集合]Map的 entrySet() 详解以及用法(四种遍历map的方式)

    Entry 由于Map中存放的元素均为键值对,故每一个键值对必然存在一个映射关系. Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value (我们总说键值对键值对, 每一个键值对也 ...

  6. Es6(Symbol,set,map,filter)

    首先再讲这几个新东西之前,先说一个Es6中新出的扩展运算符(...) 1.展开运算符,就是把东西展开,可以用在array和object上 比如: let a=[,] let b=[,...a,]//[ ...

  7. ES6(四) --- 正则 Number Math

    想学vue了  重启ES6的学习之路 在ES5 中正则的构造器  RegExp  不支持第二个参数 ES6 做了调整   第二个参数表示正则表达式的修饰符(flag) var regex = new ...

  8. 深入理解ES6之—set与map

    Set是无重复值的有序列表.Set会自动移除重复的值,因此你可以使用它来过滤数组中重复的值并返回结果. Map是有序的键值对,其中的键允许是任何类型. Set和Map是es6新增的两个数据集合. Se ...

  9. ES6(四)字符串的扩展

    1.字符的表示方式 最早在  \u0000-\uFFFF 之间的字符已经足够使用吗,每个字符占两个字节,超出范围,必须使用双字节形式表达, 即每个字符占四个字节.超出范围的字符,会被解读成  \uXX ...

  10. es6入门set和map

    ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set函数可以接受一个数组(或类似数组的对象)作为参数,用来初始化. var set = new Set([1, ...

随机推荐

  1. 敏捷测试(3)--基于story的敏捷基础知识

    基于story的敏捷基础知识----story编写 为什么使用Story? 软件行业40年多来,需求分析技术已经很成熟了,但是MRD驱动的过程不堪重负.因为往往MRD编写会占去很多时间,MRD评审又会 ...

  2. 4.4、Libgdx使用方法查询运行环境相关属性

    (原文:http://www.libgdx.cn/topic/46/4-4-libgdx%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95%E6%9F%A5%E8%AF%A2%E ...

  3. 开源电子商务平台:OfBiz

    OFBiz是一个电子商务平台,是一个非常著名的开源项目,提供了创建基于最新J2EE/XML规范和技术标准,构建大中型企业级.跨平台.跨数据库.跨应用服务器的多层.分布式电子商务类WEB应用系统的框架. ...

  4. (八)喜马拉雅Demo引出的细节(代理模式和图片缩放)

    喜玛拉雅是一款电台APP,界面非常美观,通过模仿这一APP学习到很多细节. 1.图片导入后有些框内不全如何补全: 寻常的办法是再准备一张图片拖入,比较好的办法是右击已经导入的图片选择Show in F ...

  5. Android Studio环境下搭建ReactNative

    1.安装Android Studio首先肯定是 安装Android Studio(包含SDK)(国内推荐)ps:这里有一点要注意,需要为SDK配置环境变量,名称必须为ANDROID_HOME 2.安装 ...

  6. STL算法设计理念 - 函数对象和函数对象当参数和返回值

    函数对象: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.一个类对象,表现出一个函数的特征,就是通过"对象名+(参数列表)&qu ...

  7. Android NDK开发三:java和C\C++交互

    转自:http://www.cnblogs.com/shangdahao/archive/2013/05/02/3053971.html 1.定义native方法并加载动态链接库: public cl ...

  8. "《算法导论》之‘线性表’":双向循环链表

    本文双链表介绍部分参考自博文数组.单链表和双链表介绍 以及 双向链表的C/C++/Java实现. 1 双链表介绍 双向链表(双链表)是链表的一种.和单链表一样,双链表也是由节点组成,它的每个数据结点中 ...

  9. TCP连接建立系列 — 服务端接收ACK段(二)

    本文主要分析:三次握手中最后一个ACK段到达时,服务器端的处理路径. 内核版本:3.6 Author:zhangskd @ csdn blog 创建新sock 协议族相关的操作函数,我们要看的是TCP ...

  10. iOS下FMDB的多线程操作(一)

    iOS中一些时间比较长的操作都应该放在子线程中,以避免UI的卡顿.而sqlite 是非线程安全的,故在多线程中不能共用同一个数据库连接,否则会导致EXC_BAD_ACCESS.所以我们可以在子线程中创 ...