es6冲刺02
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 = () => {
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的更多相关文章
- es6冲刺01
1.let/const 1)作用域:es5中有全局作用域.函数作用域.es6中新增了块级作用域 2)let定义的变量在所在块级作用域外失效,严格模式下失效后直接报错, 且不允许重复声明同名变量 3)c ...
- [ES6系列-02]Arrow Function:Whats this?(箭头函数及它的this及其它)
[原创] 码路工人 大家好,这里是码路工人有力量,我是码路工人,你们是力量. 如果没用过CSharp的lambda 表达式,也没有了解过ES6,那第一眼看到这样代码什么感觉? /* eg.0 * fu ...
- 第02组 Alpha冲刺(3/6)
第02组 Alpha冲刺(3/6) 队名:無駄無駄组长博客作业博客 组员情况 张越洋 过去两天完成了哪些任务 摸鱼 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们尽快完成各自的 ...
- 02函数-05-generator(ES6)
generator(生成器)是ES6标准引入的新的数据类型. generator看上去像一个函数,但可以返回多次,除了return语句,还可以用yield返回多次.定义方式如下: function* ...
- 02函数-04-箭头函数(ES6)
ES6新增的函数:Arrow Function,定义方式就是一个箭头 箭头函数相当于匿名函数,并且简化了函数定义,和匿名函数最大的区别在于其内部的this不再"乱跑",而是由上下文 ...
- 第02组 Beta冲刺(2/5)
队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 数据库实践 提交记录(全组共用) 接下来的计划 加快校园百科的进度 还剩下哪些任务 学习软工的理论课 学习代码评估.测试 ...
- 第02组 Beta冲刺(5/5)
队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 验收了小程序的主要功能 制作Beta展示所需要用到的视频 制作Beta展示PPT 准备Beta答辩 提交记录(全组共用) ...
- 第02组 Alpha冲刺(5/6)
队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 摸鱼 准备"Alpha事后诸葛亮" 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们 ...
- 第02组 Alpha冲刺(4/6)
队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 摸鱼 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们尽快完成各自的进度 学习如何评估代码质量 准备Al ...
随机推荐
- VMware安装操作系统提示 " Intel VT-x 处于禁用状态"解决方法
VMWARE WORKSTATION 在安装64为操作系统(kali)报错,报错内容为:“已将该虚拟机配置为使用 64 位客户机操作系统.但是,无法执行 64 位操作. 此主机支持 Intel VT- ...
- Codeforces 666E E - Forensic Examination SA + 莫队 + 线段树
E - Forensic Examination 我也不知道为什么这个复杂度能过, 而且跑得还挺快, 数据比较水? 在sa上二分出上下界, 然后莫队 + 线段树维护区间众数. #include< ...
- HTML5拖放牛刀小试
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- 51Nod1553 周期串查询 字符串 哈希 线段树
原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1553.html 题目传送门 - 51Nod1553 题意 有一个串只包含数字字符.串的长度为n,下标 ...
- bind注意事项(传引用参数的时候)
默认情况下,bind的那些不是占位符的参数被拷贝到bind返回的可调用对象中. 当需要把对象传到bind中的参数中时,需要使用ref或者cref. 例如: #include<iostream&g ...
- ActiveMQ在windows下启动失败解决方案
activemq.xml文件中的 <transportConnectors> <!-- DOS protection, limit concurrent connections to ...
- js(javaScript)的各种事件触发,以常见为主eg:onclick
js的各种事件触发,以常见为主eg:onclick1.onclick,点击后触发事件 (1)<h1 onclick="this.innerHTML='谢谢!'">请点击 ...
- Python之IO编程——文件读写、StringIO/BytesIO、操作文件和目录、序列化
IO编程 IO在计算机中指Input/Output,也就是输入和输出.由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘.网络等,就需要IO接口.从 ...
- Java中CardLayout布局方式的应用
import java.awt.CardLayout; import java.awt.Color; import java.awt.Container; import javax.swing.JBu ...
- Java 之 Web前端(四)
1.EL表达式 a.语法: <%pageContext.setAttribute("page","page") %> ${page} b.适用:pa ...