一,Symbol

原始数据类型,不是对象,它是JavaScript第七种数据类型,表示独一无二的值。Symbol是通过Symbol函数生成的:

let s = Symbol();

typeof s
// "symbol"

不用new,因为Symbol不是对象,而是原始值。Symbol通常作为内置的值来使用,最重要的一个属性:

Symbol.iterator,该属性指向该对象的默认遍历器方法,所以

obj[Symbol.iterator]会返回该对象的默认遍历器,然后可以使用遍历器一些方法比如for...of

二,Set,Map

1,Set

类似于数组,但是成员的值都是唯一的,本身是构造函数,所以可以const s = new Set();

Set函数接收一个数组,会进行去重,但是注意返回的是Set结构,不是数组,因此要转换一下

[...new Set(array)],这就是最简单的数组去重。

Set生成的对象有size属性(实际是Set.prototype.size属性),代表里面成员个数,都是不重复的。

4个操作方法:

add(value),添加某个值,返回Set结构本身,所以可以链式使用,连续add,但是如果add都是同一个,其实只算1个

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

has(value),返回布尔值,表示是否为Set的成员

clear(),清楚所有成员,没有返回值

4个遍历方法:

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

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

entries():返回键值对的遍历器,entries不管是数组操作还是对象操作,还是其他操作,返回的都是['键名', '键值']这样的一个一个数组

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

返回遍历器的通常操作是for...of循环返回的遍历器

利用Set实现数组的交集,并集和差集。

let arr1 = [1,2,3];
let arr2 = [4,2,1]; let a = new Set(arr1);
let b = new Set(arr2); // 并集
let union = new Set([...a, ...b]);
// Set {1, 2, 3, 4} // 交集
let intersect = new Set([...a].filter(x => b.has(x)));
// Set {1, 2} // 差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {3, 4}

这里要注意的点:

1,new Set只能传一个数组,在将a, b合并的时候用扩展运算符,外面要包上数组,

2,扩展运算符是适用于所有的具有iterator接口的对象,所以用a,b或者arr1,arr2都一样。

3,filter是数组方法,必须要把Set结构先转为数组结构

三,Map

JavaScript的对象本质上是键值对的集合(Hash结构),但只能用字符串作为键,而ES6提供的Map结构,类似于对象,也是键值对的集合,但是它的键不局限于字符串,各种类型的值都可以当作键,包括对象,“值-值”

cosnt m = new Map();
const o = {p: 'hello world'}; m.set(o, 'content') m.get(o) // 'content' m.has(o) // true
m.delete(o) // true
m.has(o) // false  

注意:

只有对同一个对象的引用,Map结构才将其视为同一个键!因为不同对象,内存地址是不同的,具体反例:

const map = new Map();

map.set([1], 'content')

map.get([1])   // undefined

Map的属性,方法和遍历方法跟Set一模一样。

四,Proxy

Proxy用于修改某些操作的默认行为,说白了,就是在目标对象前面设置一个“拦截层”,外界对该对象的访问必须先通过这层拦截,起到过滤和改写,Proxy译为代理,也就是“代理器”

构造函数Proxy接受两个参数,第一个是所要代理的目标对象,第二个是一个配置对象,里面是很多处理函数,就是对该函数拦截对应的操作。

主要的处理函数有:

get(target, propKey, receiver):拦截对象属性的读取,你只要访问对象任何属性,就会触发它

set(target, propKey, value, receiver):拦截对象属性的设置

apply(target, object, args): 拦截实例,只要将其作为函数调用的话就会触发,注意,是作为调用

construct(target, args): 拦截作为构造函数调用,就是用了new

var handler = {
get: function(target, name){
if (name === 'prototype'){
return Object.prototype;
}
return 'hello' + name
},
apply: function(target, thisBlinding, args) {
return args[0]
},
constructor: function(target, args) {
return {value: args[1]}
}
}; var fproxy = new Proxy(function(x, y){
return x+y
}, handler); fproxy(1, 2) // 1
new fproxy(1, 2) // {value: 2}
fproxy.prototype === Object.prototype // true
fproxy.foo // 'Hello, foo'

  

五,Reflect

Reflect对象类似于Proxy对象,设计目的:

1,将Object对象的属于语言内部的方法放到了Reflect对象上,如Object.defineProperty

2,修改某些Object方法的返回结果

3,让Object操作都变成函数行为

4,Reflect对象的方法与Proxy对象的方法一一对应

es6重点笔记:Symbol,Set,Map,Proxy,Reflect的更多相关文章

  1. es6重点笔记:对象

    1,Object.is():比较两个值是否严格相等,es5的'===',不能判断+0和-0,还有NaN,但是es6的Object.is()可以区分 Object.is(+0, -0); // fals ...

  2. es6重点笔记:数值,函数和数组

    本篇全是重点,捡常用的怼,数值的扩展比较少,所以和函数放一起: 一,数值 1,Number.EPSILON:用来检测浮点数的计算,如果误差小于这个,就无误 2,Math.trunc():取整,去除小数 ...

  3. es6学习笔记-Symbol

    概述 ES5 的对象属性名都是字符串,这容易造成属性名的冲突.比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突.如果有一种机制 ...

  4. es6重点笔记:let,const

    一,let 先看代码: var a = []; for (var i = 0; i < 10; i++) { a[i] = function () { console.log(i) }; } a ...

  5. es6学习笔记-set和map数据结构

    ES6 提供了新的数据结构 Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set 本身是一个构造函数,用来生成 Set 数据结构. const s = new Set(); [2, 3 ...

  6. ES6重点--笔记(转)

    最常用的ES6特性 let, const, class, extends, super, arrow functions, template string, destructuring, defaul ...

  7. ES6 新增数据类型检测 Set Map Proxy

    检测代码方法 function isNative(api){ return /native code/.test(api.toString())&&typeof api !== 'un ...

  8. es6学习笔记--新数据类型Symbol

    学习了es6语法的symbol类型,整理笔记,闲时复习. Symbol 是es6新增的第七种原始数据类型(null,string,number,undefined,boolean,object),是为 ...

  9. ES6学习笔记(9)----Symbol

    参考书<ECMAScript 6入门>http://es6.ruanyifeng.com/ Symbol1.symbol:Symbol是javascript的第七种原始数据类型,代表独一无 ...

随机推荐

  1. jQuery 属性(十二)

    属性 描述 context 在版本 1.10 中被弃用.包含传递给 jQuery() 的原始上下文. jquery 包含 jQuery 版本号. jQuery.fx.interval 改变以毫秒计的动 ...

  2. micropython TPYBoard v202 超声波测距

    实验目的 了解超声波模块的工作原理 学习使用超声波模块测量距离 实验器材 TPYBoard v202 1块 超声波模块(HC-SR04)1个 micro USB数据线 1条 杜邦线 若干 超声波模块的 ...

  3. vue2.0 路由模式mode="history"的作用

    特别提醒:开启mode="history"模式,需要服务端的支持,因为出现"刷新页面报错404"的问题: 备注:微信分享:vue项目路由带"#&quo ...

  4. Macbook下安装管理MySQL

    下载安装MySQL 1.访问MySQL官网:http://dev.mysql.com/downloads/ 2.下载 MySQL Community Server: 3.Select Platform ...

  5. [译]what is bootstrap

    Question:Bootstrap的定义?有什么用?如何助力前端开发?   Answers: 它是一个在用HTML,CSS和javascript创建网站和网页应用的时候可以用到的基础内容. More ...

  6. cs231n spring 2017 lecture9 CNN Architectures 听课笔记

    参考<deeplearning.ai 卷积神经网络 Week 2 听课笔记>. 1. AlexNet(Krizhevsky et al. 2012),8层网络. 学会计算每一层的输出的sh ...

  7. MATLAB学习笔记

    魔方矩阵(magic(阶数)) 魔方矩阵又称幻方,是有相同的行数和列数,并在每行每列.对角线上的和都相等的矩阵.魔方矩阵中的每个元素不能相同.你能构造任何大小(除了2x2)的魔方矩阵. 希尔伯特矩阵( ...

  8. 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】

    度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...

  9. [51nod Round 15 B ] 完美消除

    数位DP. 比较蛋疼的是,设a[i]表示第i位上数字,比方说a[1]<a[2]>a[3],且a[1]==a[3]时,这两位上的数可以放在一起搞掉. 所以就在正常的f数组里多开一维,表示后面 ...

  10. stl 在 acm中的应用总结

    总结一些在acm中常用的小技巧,小函数 之前尝试着总结过很多次.都失败了,因为总是担心不全,理解的也不是很透彻.这次再来一次...其实之前保存了很多的草稿就不发布了,当然,下面说的很不全面,路过的大牛 ...