Symbol

概念

Symbol:一种新的原始数据类型,表示独一无二的值。

注意:Symbol函数的参数只是表示对当前Symbol值的描述,因此相同参数的Symbol函数的返回值是不相等的。

// 没有参数的情况
var s1 = Symbol();
var s2 = Symbol(); s1 === s2 // false // 有参数的情况
var s1 = Symbol("foo");
var s2 = Symbol("foo"); s1 === s2 // false

作为属性的Symbol

三种写法:

var mySymbol = Symbol();

// 第一种写法
var a = {};
a[mySymbol] = 'Hello!'; // 第二种写法
var a = {
[mySymbol]: 'Hello!'
}; // 第三种写法
var a = {};
Object.defineProperty(a, mySymbol, { value: 'Hello!' }); // 以上写法都得到同样结果
a[mySymbol] // "Hello!"

注意,Symbol值作为对象属性名时,不能用点运算符。

Symbol属性名的遍历

Object.getOwnPropertySymbols方法,可以获取指定对象的所有Symbol属性名。

Reflect.ownKeys方法可以返回所有类型的键名,包括常规键名和Symbol键名。

Symbol.for(),Symbol.keyFor()

Symbol.for(key): 返回一个命名为key的Symbol值,如果没有则创建。可使不同变量使用同一个Symbol

Symbol.keyFor(value): for的逆操作

Set和Map数据类型

Set

概念:类似数组,但是没有重复的值

初始化: new Set([1,2,3,4,4])

注意:在Set内部,两个NaN是相等。而两个空对象不相等,所以它们被视为两个值。

set的属性和方法

Set.prototype.constructor

Set.prototype.size // 获取成员总数

实例方法:

1.操作方法

add():添加某个值,返回Set结构本身。

delete():删除某个值,返回一个布尔值,表示删除是否成功。

has():返回一个布尔值,表示该值是否为Set的成员。

clear():清除所有成员,没有返回值。

2.遍历方法

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

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

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

forEach():使用回调函数遍历每个成员

WeakSet

概念:也是set数据类型,但是成员只能是对象

特点:无法引用WeakSet的成员,因此WeakSet是不可遍历的

Map

概念:类似对象,但是键不限于字符串

初始化:new Map(Object or Array) Object或Array必须是形似键值对集合的

var map = new Map([['name', '张三'], ['title', 'Author']]);

map.size // 2
map.has('name') // true
map.get('name') // "张三"
map.has('title') // true
map.get('title') // "Author"

Map属性和方法:

size属性:返回Map结构的成员总数。

1.操作方法:

set(key, value):设置键值对

get(key):获取对应键的值

has(key):是否有对应键

delete(key):删除对应键

clear():清除所有成员

2.遍历方法

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

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

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

forEach():使用回调函数遍历每个成员

需要特别注意的是,Map的遍历顺序就是插入顺序。

问题:map要使用数组的方法怎么用更方便?

let map1 = new Map(
[...map0].filter(([k, v]) => k < 3)
);

WeakMap

概念:也是Map数据类型,但是成员只能是对象

特点:键名所指向的对象,不计入垃圾回收机制

WeakMap与Map在API上的区别:

一是没有遍历操作(即没有key()、values()和entries()方法),也没有size属性;

二是无法清空,即不支持clear方法。这与WeakMap的键不被计入引用、被垃圾回收机制忽略有关。

因此,WeakMap只有四个方法可用:get()、set()、has()、delete()。

Iterator

概念:

1.适用对象:Array、Map、Set、某些类似数组的Object

2.作用

Iterator的作用有三个:

一是为各种数据结构,提供一个统一的、简便的访问接口;

二是使得数据结构的成员能够按某种次序排列;

三是ES6创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of消费。

凡是部署了Symbol.iterator属性的数据结构,就称为部署了遍历器接口。

一个数据结构只要具有Symbol.iterator属性,就可以认为是“可遍历的”(iterable)。

调用场合

1.解构赋值

2.扩展运算符

3.yield

4.所以任何接受数组作为参数的场合,其实都调用了遍历器接口。

字符串的Iterator

for...of

遍历拥有Iterator接口的集合

适用范围:数组、Set和Map结构、某些类似数组的对象(比如arguments对象、DOM NodeList对象)、后文的Generator对象,以及字符串。

for...in循环有几个缺点:

1.数组的键名是数字,但是for...in遍历会转化成字符串

2.不止遍历自身,还会遍历原型链上的属性

3.某些情况下,会以任意顺序遍历

ES6学习笔记(三):与迭代相关的新东东的更多相关文章

  1. ES6学习笔记<三> 生成器函数与yield

    为什么要把这个内容拿出来单独做一篇学习笔记? 生成器函数比较重要,相对不是很容易理解,单独做一篇笔记详细聊一聊生成器函数. 标题为什么是生成器函数与yield? 生成器函数类似其他服务器端语音中的接口 ...

  2. ES6学习笔记(三)——数值的扩展

    看到这条条目录有没有感觉很枯燥,觉得自己的工作中还用不到它所以实在没有耐心看下去,我也是最近得闲,逼自己静下心来去学习去总结,只有在别人浮躁的时候你能静下心来去学去看去总结,你才能进步.毕竟作为前端不 ...

  3. ES6学习笔记六:迭代

    一:迭代器 它是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员). ES6创造了一种新的遍历命令for. ...

  4. ES6学习笔记三:Symbol、Set、Map

    一:Symbol ES6 引入了一种新的原始数据类型Symbol,表示独一无二的值.它是 JavaScript 语言的第七种数据类型,前六种是:undefined.null.布尔值(Boolean). ...

  5. ES6学习笔记三

    1.Symbol ES5 的对象属性名都是字符串,这容易造成属性名的冲突.如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突.这就是 ES6 引入Symbol的原因 ...

  6. ES6学习笔记三(proxy和reflect)

    proxy用法 // 代理 { let obj={ time:'2017-03-11', name:'net', _r: }; let monitor=new Proxy(obj,{ // 拦截对象属 ...

  7. ES6学习笔记<四> default、rest、Multi-line Strings

    default 参数默认值 在实际开发 有时需要给一些参数默认值. 在ES6之前一般都这么处理参数默认值 function add(val_1,val_2){ val_1 = val_1 || 10; ...

  8. ES6学习笔记<五> Module的操作——import、export、as

    import export 这两个家伙对应的就是es6自己的 module功能. 我们之前写的Javascript一直都没有模块化的体系,无法将一个庞大的js工程拆分成一个个功能相对独立但相互依赖的小 ...

  9. ES6学习笔记<二>arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  10. ES6学习笔记<一> let const class extends super

    学习参考地址1  学习参考地址2 ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015:也 ...

随机推荐

  1. 【转】常见的Web实时消息交互方式和SignalR

    https://www.cnblogs.com/Wddpct/p/5650015.html 前言 1. Web消息交互技术1.1 常见技术1.2 WebSocket介绍1.3 WebSocket示例 ...

  2. 优化ansible速度

    1.开启SSH长连接 ssh_args = -C -o ControlMaster=auto -o ControlPersist=1d \\连接保持一天 2.开启pipelining ansible执 ...

  3. 通过cgroup给docker的CPU和内存资源做限制

    1.cpu docker run -it --cpu-period=100000 --cpu-quota=2000 ubuntu /bin/bash 相当于只能使用20%的CPU 在每个100ms的时 ...

  4. sql的一个查询,情景:a表中存在的数据,且在b表中不存在 (not in,not exists

    这里需要强调的是b表中关联字段的值是唯一的这种情况,并且b表尽量是列举类型的,意味着表比较小. ==================== 准备数据: 1. 建两个类似表,test1,test2,只有i ...

  5. ZOJ3623:Battle Ships(全然背包)

    Battle Ships is a new game which is similar to Star Craft. In this game, the enemy builds a defense ...

  6. 20155207 《网络对抗》 Exp9 Web安全基础

    20155207 <网络对抗> Exp9 Web安全基础 实验内容 关于WebGoat Cross-Site Scripting(XSS)练习 Injection Flaws练习 CSRF ...

  7. Java通过pinyin4j实现汉字转拼音

       碰到个需求,需要按用户名字的首字母来排序.这就需要获取汉字对应的拼音了,突然就想起了pinyin4j这个jar包,于是就开始写了个汉字转拼音的工具类.在此记录一下,方便后续查阅 一.Pom依赖 ...

  8. Struts2将图片输出到页面

            在做CRUD的过程中,添加页面是个表单,表单里面有一项是上传头像文件.这样表单提交后,头像文件上传了. 但这个文件存的地址是本地硬盘的一个文件夹.在编辑页面要做这个头像的回显的话,就需 ...

  9. [CF1007D]Ants[2-SAT+树剖+线段树优化建图]

    题意 我们用路径 \((u, v)\) 表示一棵树上从结点 \(u\) 到结点 \(v\) 的最短路径. 给定一棵由 \(n\) 个结点构成的树.你需要用 \(m\) 种不同的颜色为这棵树的树边染色, ...

  10. [APIO2015]巴厘岛的雕塑[按位贪心+dp]

    题意 给你长度为 \(n\) 的序列,要求分成 \(k\) 段连续非空的区间,求所有区间和的 \(or\) 最小值. 分析 定义 \(f_{i,j}\) 表示前 \(i\) 个点分成 \(j\) 段的 ...