ES6 Symbol数据类型和set-map 数据结构
Symbol数据类型
ES6新加的数据类型,提供一个独一无二的值
{ let a1 = Symbol() ;let a2 = Symbol() } //声明
{ let a3 = Symbol.for('a3') } //这种声明方式方便再取回来
{ let a1=Symbol.for('abc'); let obj={ [a1]:'123' , 'abc':235}; console.log(obj) } //{abc: "235", Symbol(abc): "123"}
如果使用Symbol配置值的话则使用let of 的方式取不到Symbol(abc)的值
Object.getOwnPropertySymbols(obj).forEach(function(item){console.log(obj[item])}); //123 只取到Symbol的值
取所有值://Reflect.ownKeys返回一个数组,包含对象自身的所有属性,不管是属性名是Symbol或字符串,也不管是否可枚举
Reflect.ownKeys(obj).forEach(function(item){console.log(obj[item])}) //235 123
set-map 数据结构
set
① 声明
不加参数 :
{ let list = new Set(); list.add(5) ; list.add(7); } //list.size()是2
加参数 :
{ let arr= [1,2,3,4,5]; let list = new Set(arr) } //list.size()是5
② set添加重复的元素不会报错,但是不会添加进去,可以利用这个作用来去重(需要注意下元素的数据类型是否一致)
{ let list = new Set(); list.add(5) ; list.add(7); list.add(5); } //list.size()是2
③ 操作函数 :
add delete clear has
④ 遍历:
元素的keys()和values()的值是一样的
for(let key of list.keys()){ console.log(key) }
for(let value of list.values()){ console.log(value) }
for(let [key,value] of list.entries()){ console.log(key,value) }
WeakSet
区别:
支持的元素类型不一样,WeakSet只能是对象;
WeakSet的对象是弱引用,不会检测该对象是否在其他地方用过,只是地址的引用;
没有size属性;没有clear方法;其余的add delete has 方法一致
不能遍历
①声明
{ let weakset = new WeakSet() ; let arg ={} ; weakset.add(args) }
Map 键值对
key可以是任何数据类型
①声明 :
{ let map = new Map(); let arr= ['123']; map.set(arr,'234'); } //map.get(arr) = '234'
{ let map = new Map([ ['a',123],['b',456] ])} //{"a"=>123,"b"=>456} ; map.size=2
map不能set一个item对象,需要使用声明的第二种方式
②函数:set delete clear
③遍历:同set
WeakMap
接收的key值必须是对象,没有clear方法,不能遍历
{ let weakmap = new WeakMap() ; let obj={}; weakmap.set(obj,123)} //weakmap.get(obj)=123
对比:
Set Map与Array对比
let set= new Set() ; let map = new Map() ; let arr = [] ;
//增加
set.add({t:1});
map.set('t',1);
arr.push({t:1})
//查找
let set_exists = list.has({t:1}) ///false ,has查询的是对象的引用
let map_exists = map.has(‘t’) //true 返回布尔值
let arr_exists = array.find(item=>item.t) //{t:1} 返回对象
//改
set.forEach(item=>item.t?item.t=2:'') //在set中要是直接修改的话他不会检查是否冲突,而是直接加了一个,所以需要先找到再修改
map.set('t',2);
array.forEach(item=>item.t?item.t=2:'') //数组需要先forEach找到再修改
//删除
set.forEach(item = item.t?set.delete(item):'')
map.delete('t')
let index = array.findIndex(item=>item.t) array.splice(index,1) //数组需要先找到再删
Map Set 和Array的对比
let item = {t:1}; let set= new Set(); let map = new Map(); let obj={}
//增加
set.add(item)
map.set('t',1)
obj['t']:1
//查询
set.has(item) //
map.has('t')
't' in obj //使用in
//删除
set.delete(item)
map.delete('t')
delete obj['t']
//修改
item.t =2 //set是引用,直接修改item,set下的值会随之变化
map.set('t':4)
obj['t']=4
使用场景:
能使用map的不使用数组,对于数据要求比较高和唯一性使用set,放弃object
ES6 Symbol数据类型和set-map 数据结构的更多相关文章
- Java数据类型和MySql数据类型对应一览
类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lang.String 12 CHAR N ...
- 数据类型和typeof操作符
虽然学习js有一段时间了,但是对js的基础语法却是有些生疏.最近在看jquery源码,决定随带总结一些基础的语法知识.今天总结一下数据类型和typeof,这在写js的时候,是不得不知道的知识. 数据类 ...
- Sql Server中的数据类型和Mysql中的数据类型的对应关系(转)
Sql Server中的数据类型和Mysql中的数据类型的对应关系(转):https://blog.csdn.net/lilong329329/article/details/78899477 一.S ...
- SQL数据类型和C#数据类型间的转换
今天看到SQL数据类型和C#数据类型间的转换,前人留下的. <?xml version="1.0" encoding="utf-8" ?> < ...
- MySql数据类型和Java数据类型对应一览
类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lang.String 12 CHAR N ...
- Java数据类型和MySql数据类型对应一览 [转]
类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java.lang.String 12 CHAR N ...
- mysql数据类型和java数据类型匹配
Java数据类型和MySql数据类型对应一览 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述 VARCHAR L+N VARCHAR java. ...
- ES6学习笔记(10)----Set和Map数据结构
参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ Set和Map数据结构 1.Set 基本用法 Set是一种新的数据结构,它的成员都是唯一 ...
- ES6学习总结之Set和Map数据结构的理解
前言 当我们需要存储一些数据的时候,首先想到的是定义一个变量用来存储,之后我们可能学了数组,发现数组比变量可以存储更多的数据,接着可能有其它的存储数据的方法等等,然而我今天需要介绍的是在ES6中比较常 ...
随机推荐
- vue.js过滤器
import Vue from 'vue' import { ENV } from '@/config/conf' const dateFormat = (str) => { var date ...
- RabbitMQ基础知识及Linux安装
RabbitMQ: RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现. AMQP协议: AMQP,即Advanced Message Qu ...
- day18正则及re模块
在线测试工具 http://tool.chinaz.com/regex/ 正则表达式本身和python语言没什么联系,只是匹配字符串内容的一种规则:详见:http://www.cnblogs.com/ ...
- vue项目移植tinymce踩坑
转载:https://segmentfault.com/a/1190000012791569?utm_source=tag-newest 2019-2-18 貌似这篇文章帮了大家一些小忙最近tinym ...
- Invalid tld file: "/WEB-INF/tags/xxxt.tld", see JSP 2.2 specification section 7.3.1 for more details
错误描述 在jsp页面引入了自定义的TLD文件的时候,碰到了一个错误 Invalid tld file: "/WEB-INF/tags/xxxt.tld", see JSP 2.2 ...
- 图书管理系统 (c语言实现) (全部代码)
直接上代码不解释 #include <stdio.h> #include <stdlib.h> #include <string.h> #define AVAILA ...
- eclipse 下载安装单元测试log4j的配置与搭建
搭建log4j的具体步骤 1.下载jar包放在lib 拓展库中 百度云下载 地址 链接:https://pan.baidu.com/s/1Cvb22kCJcymORehwhKnCrQ 提取码:b55m ...
- flume进阶
上一张初识里面谢了一些flume入门的内容,其实在真正工作环境里面这种情况使用的是很少的,大部分情况,我们可能需要从多台设备的日志里面汇总收集数据并存储到HDFS上,以便于后期对数据进行处理,真实的情 ...
- 2017-11-4—LTspice
LTspice这个软件基本上上手就能用,没什么好说的. ADI的一些器件下载的spice文件可能是.cir的需要使用cadence的pspice软件打开后另存为.dir文件使用.(比如ad4096) ...
- (Android UI)Android应用程序中资源:图片、字符串、颜色、布局等
Android系统设计采用代码和布局分离的设计模式,因此在设计Android应用程序时需要遵循该设计模式. “把非代码资源(如图片和字符串常量)和代码分离开来始终是一种很好的做法.”---<An ...