1、Symbol

es6新增的数据类型

1)概念

提供一个独一无二的值

let a=Symbol()

let b=Symbol()

let c=Symbol.for('c')

let d=Symbol.for('c')

c是一个key,标识着这个独一无二的变量

2、数据结构

1)set

Set中的元素不可重复

其长度用.size表征

添加重复元素(严格相等)后不会报错,但不生效,

用来去重很方便

{

let list=new Set()

list.add(1)//用add来添加元素

list.add(2)

}

{

let arr=[1,2,3,4,5]

let list=new Set(arr)

}

方法有

.add(obj)//添加

.delete(obj)//删除某一指定元素

.has(obj)//判断有无某一指定元素

.clear()//清空set

WeakSet主要的区别是

支持的数据类型只能是对象,弱引用,没有size属性,没有clear

方法,

2)Map

Map的键可以是任意类型,不一定是字符串

.size表征长度

{

let map=new Map()

let arr=['123']

map.set(arr,123)//键,值新增元素

map.get(''键)//获取元素

}

{

let map=new Map([key1,val1],[[key2,val2],...)

//另一种定义方式

}

方法:

.delete(key) 删除

.clear() 清空

WeakMap()所接受键必须是对象,不可遍历,即和weakset的特性一致

3)与数组的对比

数组修改比较难,要先遍历。而Map

只需map.set即可

数组做删除较难,需要先知道索引,现在我们只需要

map.delete即可

4)与对象的对比

Obj/set/map增加都很简单

3、Reflect/Proxy

1)Proxy

Proxy实例成为某一对象的代理,它将拦截对该对象的部分

或所有操作

monitor成为对象的代理

2)Reflect是一个映射

{

let obj={

name:'cc',

age:25

}

Reflect.get(obj,'name')//静态方法,获取属性

Reflect.set(obj,'name','ee')//设置属性

}

Proxy和Refelct常用于数据校验

{
function validate(target, validator) {
return new Proxy(target, {
_validator: validator,
set(target, key, value, proxy) {
if (target.hasOwnProperty[key]) {
let va = this._validator[key]
if (va(value)) {
return Reflect.set(target, key, value, proxy)
} else {
throw Error(`${key} failed`)
}
}
}
})
}
const validator={
name(val){
return typeof val === string
},
age(val){
return typeof val <= 18
}
} Class Person{
constructor(name,age){
this.name=name
this.age=age
return validator(this,validator)
}
}
}

4、类与对象

1)

class ClassName{

  constructor(prop1,...){

}

}

举例:

class Person{//定义了一个名字为Person的类
constructor(name,age){//constructor是一个构造方法,用来接收参数
this.name = name;//this代表的是实例对象
this.age=age;
}
say(){//这是一个类的方法,注意千万不要加上function
return "我的名字叫" + this.name+"今年"+this.age+"岁了";
}
}
1.在类中声明方法的时候,千万不要给该方法加上function关键字
2.方法之间不要用逗号分隔,否则会报错
由下面代码可以看出类实质上就是一个函数。类自身指向的就是构造函数
。所以可以认为ES6中的类其实就是构造函数的另外一种写法。
实际上类的所有方法都定义在类的prototype属性上
class不存在变量提升
var obj=new Person("laotie",88);
console.log(obj.say());//我的名字叫laotie今年88岁了

还可以通过Object.assign方法来为对象动态增加方法
Object.assign(Person.prototype,{
getName:function(){
return this.name;
},
getAge:function(){
return this.age;
}
})

2)继承:

{

class A{}

class B extends A{

}

}

{

class A{

constructor(name='cc'){

this.name=name

}

}

class B extends A{

constructor(name,age){

super(name)

this.age=age//子类特有属性应该在继承属性之后

}

}

}

3)getter/setter、

class Parent{
constructor(name='cc'){
this.name=name
} get newName(){
return 'lisa'+this.name
} set newName(value){
this.name=value
} //get和set都是属性,不要当成方法
} let mom=new Parent()
mom.newName='linda'
console.log(mom.newName)

4)静态方法/属性

用类直接调用

定义:

class Parent{

static put(){

console.log('put')

}

}

Parent.type='静态'//定义静态属性

5、Promise

1)解决异步操作问题

在es5中,我们常用回调函数解决异步问题,我们用定时器模拟了异步操作问题

{
let ajax =function (callback) {
setTimeout(()=>{
callback&&callback.call()
},1000)
}
ajax(()=>console.log('hello over'))
}
2)
let ajax = () => {
console.log("this is an ajax")
return new Promise((resolve, rejrect) => {
setTimeout(() => {
resolve()
}, 1000)
})
}
ajax().then(()=>{
console.log("this is first resolve function")
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve()
},1000)
})
}).then(()=>{
console.log('this is second resolve function')
})

resolve是异步操作成功的调用,reject是异步操作失败后的调用,可省略

使用Promise请注意:

每个函数必须返回promise对象才能继续调用then方法,然后res和return Promise对象必须再异步操作之后

then返回一个promise实例,使得异步操作可以继续进行下去

捕获错误:

在末尾添加.catch即可

.then(...).catch(()=>{})

这样我们就解决了异步操作的顺序问题

promise的使用方法

①首先构造一个Promise实例

var p =new Promise((res,rej)=>{

//一些异步操作

res(args)//可以传参,这样就是下一个then里的第一个函数的实参

rej(args)/可以传参,这样就是下一个then里的第二个函数的实参

})

②明确,只要有res,就能继续延伸下去(以then的方式),重复

p.then(

var

)

3)高级方法

Promise.all()/

将多个promise实例整合成一个promise实例

Promise.all([

异步操作1,

异步操作2,...

]).then()

then中的参数是由各个异步操作所给的res参数组成的数组

Promise.race([

异步操作1,

异步操作2,...

]).then()

只要有一个异步操作完成,就可以去执行then

es6冲刺02的更多相关文章

  1. es6冲刺01

    1.let/const 1)作用域:es5中有全局作用域.函数作用域.es6中新增了块级作用域 2)let定义的变量在所在块级作用域外失效,严格模式下失效后直接报错, 且不允许重复声明同名变量 3)c ...

  2. [ES6系列-02]Arrow Function:Whats this?(箭头函数及它的this及其它)

    [原创] 码路工人 大家好,这里是码路工人有力量,我是码路工人,你们是力量. 如果没用过CSharp的lambda 表达式,也没有了解过ES6,那第一眼看到这样代码什么感觉? /* eg.0 * fu ...

  3. 第02组 Alpha冲刺(3/6)

    第02组 Alpha冲刺(3/6)   队名:無駄無駄组长博客作业博客 组员情况 张越洋 过去两天完成了哪些任务 摸鱼 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们尽快完成各自的 ...

  4. 02函数-05-generator(ES6)

    generator(生成器)是ES6标准引入的新的数据类型. generator看上去像一个函数,但可以返回多次,除了return语句,还可以用yield返回多次.定义方式如下: function* ...

  5. 02函数-04-箭头函数(ES6)

    ES6新增的函数:Arrow Function,定义方式就是一个箭头 箭头函数相当于匿名函数,并且简化了函数定义,和匿名函数最大的区别在于其内部的this不再"乱跑",而是由上下文 ...

  6. 第02组 Beta冲刺(2/5)

    队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 数据库实践 提交记录(全组共用) 接下来的计划 加快校园百科的进度 还剩下哪些任务 学习软工的理论课 学习代码评估.测试 ...

  7. 第02组 Beta冲刺(5/5)

    队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 验收了小程序的主要功能 制作Beta展示所需要用到的视频 制作Beta展示PPT 准备Beta答辩 提交记录(全组共用) ...

  8. 第02组 Alpha冲刺(5/6)

    队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 摸鱼 准备"Alpha事后诸葛亮" 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们 ...

  9. 第02组 Alpha冲刺(4/6)

    队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 摸鱼 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们尽快完成各自的进度 学习如何评估代码质量 准备Al ...

随机推荐

  1. python之logging

    1.简单使用 # CRITICAL, ERROR, WARNING, INFO, DEBUG) cewid import logging logging.basicConfig(level=loggi ...

  2. Flink运行在yarn上

    在一个企业中,为了最大化的利用集群资源,一般都会在一个集群中同时运行多种类型的 Workload.因此 Flink 也支持在 Yarn 上面运行: flink on yarn的前提是:hdfs.yar ...

  3. P2661 信息传递 二分图的最小环

    题目描述 有 nn 个同学(编号为 11 到 nn )正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为 ii 的同学的信息传递对象是编号为 T_iTi​ 的同学. 游戏开 ...

  4. webstorm 2017 激活破解方法大全

    webstorm 作为最近最火的前端开发工具,也确实对得起那个价格,但是秉着勤俭节约的传统美德,我们肯定是能省则省啊. 方法一:(更新时间:2018/4/8)v3.3 注册时,在打开的License ...

  5. PHP环境配置错误处理

    [Linux apt-get 更换源] 1.问题描述:按照网上的教程编辑源列表文件后发现apt-get update 出现各种错误,导致更新失败 sudo vim /etc/apt/sources.l ...

  6. HDU 4370 0 or 1 (01规划)【Dijkstra】||【spfa】

    <题目链接> 题目大意: 一个n*n的01矩阵,满足以下条件 1.X12+X13+...X1n=12.X1n+X2n+...Xn-1n=13.for each i (1<i<n ...

  7. c/c++关于指针的一点理解

    #include <iostream> #include <string> using namespace std; int main() { }, n{}; cout < ...

  8. Google Hack搜索技巧

    想了解更多搜索技巧,点击下面网站了解http://exploit-db.com/google-dorks Google Hack的一些整理 这里是google关键字的用法,要设置它为中文,则是 htt ...

  9. CUDA版Grabcut的实现

    在上次用 CUDA实现导向滤波 后,想着导向滤波能以很小的mask还原高分辨率下的边缘,能不能搞点事情出来,当时正好在研究Darknet框架,然后又看到grabcut算法,用opencv试了下,感觉效 ...

  10. 1038. Jewels And Stones

    描述 给定字符串J代表是珠宝的石头类型,而S代表你拥有的石头.S中的每个字符都是你拥有的一个石头. 你想知道你的石头有多少是珠宝. J中的字母一定不同,J和S中的字符都是字母. 字母区分大小写,因此& ...