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 数据结构的更多相关文章

  1. Java数据类型和MySql数据类型对应一览

    类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang.String 12   CHAR N ...

  2. 数据类型和typeof操作符

    虽然学习js有一段时间了,但是对js的基础语法却是有些生疏.最近在看jquery源码,决定随带总结一些基础的语法知识.今天总结一下数据类型和typeof,这在写js的时候,是不得不知道的知识. 数据类 ...

  3. Sql Server中的数据类型和Mysql中的数据类型的对应关系(转)

    Sql Server中的数据类型和Mysql中的数据类型的对应关系(转):https://blog.csdn.net/lilong329329/article/details/78899477 一.S ...

  4. SQL数据类型和C#数据类型间的转换

    今天看到SQL数据类型和C#数据类型间的转换,前人留下的. <?xml version="1.0" encoding="utf-8" ?> < ...

  5. MySql数据类型和Java数据类型对应一览

    类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang.String 12   CHAR N ...

  6. Java数据类型和MySql数据类型对应一览 [转]

    类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java.lang.String 12   CHAR N ...

  7. mysql数据类型和java数据类型匹配

    Java数据类型和MySql数据类型对应一览 类型名称 显示长度 数据库类型 JAVA类型 JDBC类型索引(int) 描述             VARCHAR L+N VARCHAR java. ...

  8. ES6学习笔记(10)----Set和Map数据结构

    参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ Set和Map数据结构 1.Set  基本用法    Set是一种新的数据结构,它的成员都是唯一 ...

  9. ES6学习总结之Set和Map数据结构的理解

    前言 当我们需要存储一些数据的时候,首先想到的是定义一个变量用来存储,之后我们可能学了数组,发现数组比变量可以存储更多的数据,接着可能有其它的存储数据的方法等等,然而我今天需要介绍的是在ES6中比较常 ...

随机推荐

  1. Java——静态变量/方法与实例变量/方法的区别

    静态只能调用静态 非静态: 对象名.方法名 package ti; //通过两个类 StaticDemo.LX4_1 说明静态变量/方法与实例变量/方法的区别. class StaticDemo { ...

  2. 新增项目到GIT仓库中

    在本地新建项目的目录中打开Git Bash命令行工具 运行以下命令,设置全局信息(包括用户名,邮箱地址) git config --global user.name "你的姓名" ...

  3. Hive快捷查询:不启用Mapreduce job启用Fetch task三种方式介绍

    如果查询表的某一列,Hive中默认会启用MapReduce job来完成这个任务,如下: hive>select id,name from m limit 10;--执行时hive会启用MapR ...

  4. Jmeter性能测试之关联(三)

    介绍下性能测试很重要的一个知识点---关联, 很多时候程序会在上一个请求随机生成一串字符串, 作为下一个请求的入参验证点, 其实就是动态的入参, 这个时候就需要用到关联, 常用的关联技术就是正则表达式 ...

  5. 如何在element-ui table 取到对应的ID的最后一个对象

    来回切换3个状态值如何得到对应ID的最后一个对象 var is_push = () => { for (var i = 0; i < this.form.FaultDevices.leng ...

  6. 经典合集 - WP8.1数据源

    [内容说明:] 这里是一个页面类型的数据源,在开发WP应用程序中,因为目前没有数据库服务器等网络资源,突发奇想,通过博客园提供的WCF接口访问该博文地址获取文章内容,在应用程序中使用正则表达式解析并转 ...

  7. 利用fastjson解析json并通过js&ajax实现页面的无跳转刷新

    1.json是一种优秀的数据格式,在移动开发和web开发中经常用到,本例中通过一个小案例讲解如何通过alibaba的开源框架fastjson来解析jason数据格式并通过js实现无跳转刷新 2,新建一 ...

  8. 在vue里添加好看的lottie动画 (^_^)

    为什么用lottie ★~★ 1.能让你的程序不那么单调 2.能让一些有审美强迫症的同学好受一点 3.网上有丰富的资源 点我进入lottie资源网站 引入lottie库 (>.<) 在vu ...

  9. 多媒体开发(6):滤镜实现各种图片效果 | Video-Filters | avfilter | 变色

    之前讲过使用FFmpeg的drawtext滤镜(把图片或文字加到视频上),而实际上,FFmpeg的滤镜很强大,远不止加字幕或加图片的功能.滤镜是很有趣的,可以把图片变模糊.变色.缩放旋转,等等. 本文 ...

  10. ASP.NET Core 3.0预览版体验

    目前.NET Core 3.0的版本为.NET Core 3.0 Preview 3,对应ASP.NET Core 3.0 Preview 3. ASP.NET Core 3.0 之后将不再支持.NE ...