热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ES6学习小结

ES6(ES2015)--IE10+、Chrome、FireFox、移动端、NodeJS编译、转换1.在线转换2.提前编译babelbrowser.jsES6:1.变量var重复声

ES6(ES2015)--IE10+、Chrome、FireFox、移动端、NodeJS

 

编译、转换

1.在线转换

2.提前编译

 

babel = browser.js

 

ES6:

1.变量

 

var 重复声明、函数级

let 不能重复声明、块级、变量

const 不能重复声明、块级、常量

 

 

var

1.可以重复声明 (C#,java里不可以)

2.无法限制修改

PI=3.1415926

3.没有块级作用域

4.var的作用域是函数

{

var a= 1;

}

在外面可以用a

 

let 不能重复声明,变量-可以修改,有块级作用域

const 不能重复声明,常量-可以修改,有块级作用域

 

 

2.函数

 

箭头函数

 

a.方便

i.如果只有一个参数,()可以省

ii.如果只有一个return,{}也可以省

b.修正this

this相对正常点

 

 

function 名字(){

 

}

 

()=>{

 

}

1).如果只有一个参数,()可以省

2).如果只有一个return,{}可以省

----------------------------

()—只有一个参数(可以省略)

{}—只有一个return(可以省略)

 

let arr = new Array();

let arr = [];

----------------------------

函数的参数

1).参数扩展/数组展开

2).默认参数

 

参数扩展

收集

扩展

 

默认参数

function show(a, b=5){

 

}

 

1).收集参数

show(a,b,...args){} //args可以任意命名

 

*Rest Parameter必须是最后一个( Rest parameter must be last formal parameter)

2).展开数组

...arr => 1,2,3

*展开后的效果,跟直接把数组的内容写在这儿一样

 

let arr1 = [1,2,3];

let arr2 = [5,6,7];

 

let arr = [...arr1,...arr2] <=> let arr = [1,2,3,5,6,7]

 

 

function show(...args){ //...args为数组

fn(...args); //<=> fn(12,5)

}

 

function fn(a,b){

alert(a+b);

}

 

show(12,5);//17

-------------------------------------------------------

默认参数

$(‘#div1‘).animate({width:‘200px‘});//有默认的时间

$(‘#div1‘).animate({width:‘200px‘},1000);

 

function show(a,b=5,c=12){

console.log(a,b,c);

}

show(99);//a=99,b=5,c=12

show(99,19,88);//a=99,b=19,c=88

 

 

3.解构赋值:

1).左右两边结构必须一样

 

let [a,b] = {a:12,b:5};

console.log(a,b);//报错

2).右边必须是个东西

 

let {a,b} = {12,5};//出不来,右边不是一个东西,不是数组,也不是json

console.log(a,b);

3).声明和赋值不能分开(必须在一句话里完成)

let [a,b];

[a,b] = [12,5];

console.log(a,b);//出错

 

 

let [a,b,c] = [1,2,3];

let {a,c,d} = {a:12,c:5,d:6};

 

let [{a,b},[n1,n2,n3],num,str] = [{a:12,b:5},[12,5,8],8,‘test‘];

console.log(a,b,n1,n2,n3,num,str);

 

//粒度

let [json,arr,num,str] = [{a:12,b:5},[12,5,8],8,‘test‘];

console.log(json,arr,num,str);

 

4.数组

 

map 映射

reduce 汇总:一堆->一个

filter 过滤:一堆->剩下的

forEach 循环

 

 

map 映射 一个对一个

[12,58,99,86,45,91]

[不及格,不及格,及格,及格,不及格,及格]

 

[45,57,135,28]

[

{name:‘blue‘,level:0,role:0},

{name:‘zhangsan‘,level:99,role:3},

{name:‘aaa‘,level:0,role:0},

{name:‘blue‘,level:0,role:0}

]

 

let score = [19,85,99,25,90];

let result = score.map(item=> item >=60 ?‘及格‘:‘不及格‘);

alert(score);//19,85,99,25,90

alert(result);//不及格,及格,及格,不及格,及格

 

比方说:时间,不显示今天显示

 

reduce 汇总(本意是减少) 一堆出来一个

算个总数

[12,8000000,59999] => 8060011

 

let arr = [12,69,180,8763];

//tmp是中间结果,item是项,index是下指标 1,2,3

let result = arr.reduce(function(tmp,item,index){

//alert(tmp+‘,‘+item+‘,‘+index); //12,69,1 undefined,180,2 undefined,8763,3

return tmp+item;

})

alert(result);//9024

 

算个平均数

[12,59,99] => 56.67

 

let arr = [12,69,180,8763];

 

/* //tmp是中间结果,item是项,index是下指标 1,2,3

let result = arr.reduce(function(tmp,item,index){

return tmp+item;

})

//alert(result/arr.length);// */

//tmp是中间结果,item是项,index是下指标 1,2,3

let result = arr.reduce(function(tmp,item,index){

if(index != arr.length-1){ //不是最后一次

return tmp+item;

}

else{ //最后一次

return (tmp+item)/arr.length;

}

})

alert(result);//2256 算平均值

 

filter 过滤器

 

let arr = [12,5,8,99,27,36,75,11];

let result = arr.filter(item=>item%3==0);

alert(result);//12,5,8,99,27,36,75

 

 

let arr = [

{title:‘男士寸衫‘,price:75},

{title:‘女士包‘,price:57842},

{title:‘男士包‘,price:65},

{title:‘女士鞋‘,price:27531},

];

let result = arr.filter(json=> json.price >=10000);

console.log(result);

 

forEach 循环(迭代)

 

let arr = [12,5,8,9];

 

/* arr.forEach(item=>{

alert(item);

}); */

arr.forEach((item,index)=>{

alert(index+‘:‘+item);

});

 

5.字符串

 

startsWith/endsWith

字符串模板:`${a}xxx${b}`

 

1).多了两个新方法

 

startsWith

 

endsWith

 

2).字符串模板

字符串连接

 

i.直接把东西塞到字符串里面 ${东西}

ii.可以折行

 

6.面向对象

 

ES6面向对象

1.class 关键字、构造器和类分开了

2.calss 里面直接加方法

 

/* 老的写法,类和构造函数都是User

function User(name,pass){

this.name = name;

this.pass = pass;

}

 

User.prototype.showName = function(){

alert(this.name);

};

 

User.prototype.showPass = function(){

alert(this.pass);

};

 

var u1 = new User(‘blue‘,‘123456‘);

u1.showName();

u1.showPass(); */

 

//新的写法 构造器和类分开了

class User{

//构造器

constructor(name,pass){

this.name = name;

this.pass = pass;

}

showName(){

alert(this.name);

}

showPass(){

alert(this.pass);

}

}

 

var u1 = new User(‘blue‘,‘123456‘);

u1.showName();

u1.showPass();

 

继承:

 

super--超类 = 父类

 

ES6(ES2015)--IE10+、Chrome、FireFox、移动端、NodeJS

 

编译、转换

1.在线转换

2.提前编译

 

babel = browser.js

 

ES6:

1.变量

var

1.可以重复声明 (C#,java里不可以)

2.无法限制修改

PI=3.1415926

3.没有块级作用域

4.var的作用域是函数

{

var a= 1;

}

在外面可以用a

 

let 不能重复声明,变量-可以修改,有块级作用域

const 不能重复声明,常量-可以修改,有块级作用域

 

 

2.函数

 

箭头函数

function 名字(){

 

}

 

()=>{

 

}

1).如果只有一个参数,()可以省

2).如果只有一个return,{}可以省

----------------------------

()—只有一个参数(可以省略)

{}—只有一个return(可以省略)

 

let arr = new Array();

let arr = [];

----------------------------

函数的参数

1).参数扩展/数组展开

2).默认参数

 

参数扩展

1).收集参数

show(a,b,...args){} //args可以任意命名

 

*Rest Parameter必须是最后一个( Rest parameter must be last formal parameter)

2).展开数组

...arr => 1,2,3

*展开后的效果,跟直接把数组的内容写在这儿一样

 

let arr1 = [1,2,3];

let arr2 = [5,6,7];

 

let arr = [...arr1,...arr2] <=> let arr = [1,2,3,5,6,7]

 

 

function show(...args){ //...args为数组

fn(...args); //<=> fn(12,5)

}

 

function fn(a,b){

alert(a+b);

}

 

show(12,5);//17

-------------------------------------------------------

默认参数

$(‘#div1‘).animate({width:‘200px‘});//有默认的时间

$(‘#div1‘).animate({width:‘200px‘},1000);

 

function show(a,b=5,c=12){

console.log(a,b,c);

}

show(99);//a=99,b=5,c=12

show(99,19,88);//a=99,b=19,c=88

 

 

3.解构赋值:

 

let [a,b,c]=[12,5,8];

 

左右结构一样

右边是个合法的东西

声明、赋值一次完成

 

1).左右两边结构必须一样

 

let [a,b] = {a:12,b:5};

console.log(a,b);//报错

2).右边必须是个东西

 

let {a,b} = {12,5};//出不来,右边不是一个东西,不是数组,也不是json

console.log(a,b);

3).声明和赋值不能分开(必须在一句话里完成)

let [a,b];

[a,b] = [12,5];

console.log(a,b);//出错

 

 

let [a,b,c] = [1,2,3];

let {a,c,d} = {a:12,c:5,d:6};

 

let [{a,b},[n1,n2,n3],num,str] = [{a:12,b:5},[12,5,8],8,‘test‘];

console.log(a,b,n1,n2,n3,num,str);

 

//粒度

let [json,arr,num,str] = [{a:12,b:5},[12,5,8],8,‘test‘];

console.log(json,arr,num,str);

 

4.数组

 

map 映射 一个对一个

 

let aItems = [];

for (let i = 0; i

aItems.push();

 

}

<==>

let aItems = this.props.arr.map(a=>)

 

 

 

[12,58,99,86,45,91]

[不及格,不及格,及格,及格,不及格,及格]

 

[45,57,135,28]

[

{name:‘blue‘,level:0,role:0},

{name:‘zhangsan‘,level:99,role:3},

{name:‘aaa‘,level:0,role:0},

{name:‘blue‘,level:0,role:0}

]

 

let score = [19,85,99,25,90];

let result = score.map(item=> item >=60 ?‘及格‘:‘不及格‘);

alert(score);//19,85,99,25,90

alert(result);//不及格,及格,及格,不及格,及格

 

比方说:时间,不显示今天显示

 

reduce 汇总(本意是减少) 一堆出来一个

算个总数

[12,8000000,59999] => 8060011

 

let arr = [12,69,180,8763];

//tmp是中间结果,item是项,index是下指标 1,2,3

let result = arr.reduce(function(tmp,item,index){

//alert(tmp+‘,‘+item+‘,‘+index); //12,69,1 undefined,180,2 undefined,8763,3

return tmp+item;

})

alert(result);//9024

 

算个平均数

[12,59,99] => 56.67

 

let arr = [12,69,180,8763];

 

/* //tmp是中间结果,item是项,index是下指标 1,2,3

let result = arr.reduce(function(tmp,item,index){

return tmp+item;

})

//alert(result/arr.length);// */

//tmp是中间结果,item是项,index是下指标 1,2,3

let result = arr.reduce(function(tmp,item,index){

if(index != arr.length-1){ //不是最后一次

return tmp+item;

}

else{ //最后一次

return (tmp+item)/arr.length;

}

})

alert(result);//2256 算平均值

 

filter 过滤器

 

let arr = [12,5,8,99,27,36,75,11];

let result = arr.filter(item=>item%3==0);

alert(result);//12,5,8,99,27,36,75

 

 

let arr = [

{title:‘男士寸衫‘,price:75},

{title:‘女士包‘,price:57842},

{title:‘男士包‘,price:65},

{title:‘女士鞋‘,price:27531},

];

let result = arr.filter(json=> json.price >=10000);

console.log(result);

 

forEach 循环(迭代)

 

let arr = [12,5,8,9];

 

/* arr.forEach(item=>{

alert(item);

}); */

arr.forEach((item,index)=>{

alert(index+‘:‘+item);

});

 

5.字符串

 

1).多了两个新方法

 

startsWith

 

endsWith

 

2).字符串模板

字符串连接

 

i.直接把东西塞到字符串里面 ${东西}

ii.可以折行

 

6.面向对象

 

class Test{

constructor(){

this.xxx=

}

 

方法1(){

 

}

方法2(){

 

}

}

 

class Cls2 extends Cls1{

constructor(){

super();

}

}

 

 

 

 

ES6面向对象

1.class 关键字、构造器和类分开了

2.calss 里面直接加方法

 

/* 老的写法,类和构造函数都是User

function User(name,pass){

this.name = name;

this.pass = pass;

}

 

User.prototype.showName = function(){

alert(this.name);

};

 

User.prototype.showPass = function(){

alert(this.pass);

};

 

var u1 = new User(‘blue‘,‘123456‘);

u1.showName();

u1.showPass(); */

 

//新的写法 构造器和类分开了

class User{

//构造器

constructor(name,pass){

this.name = name;

this.pass = pass;

}

showName(){

alert(this.name);

}

showPass(){

alert(this.pass);

}

}

 

var u1 = new User(‘blue‘,‘123456‘);

u1.showName();

u1.showPass();

 

继承:

 

super--超类 = 父类

 

//老的写法,继承

/* function User(name,pass){

this.name = name;

this.pass = pass;

}

 

User.prototype.showName = function(){

alert(this.name);

};

 

User.prototype.showPass = function(){

alert(this.pass);

};

 

function VipUser(name,pass,level){

User.call(this,name,pass);

this.level = level;

}

 

VipUser.prototype = new User();

VipUser.prototype.cOnstructor= VipUser;

 

VipUser.prototype.showLevel = function(){

alert(this.level);

}

 

var v1 = new VipUser(‘blue‘,‘123456‘,3);

v1.showName();

v1.showPass();

v1.showLevel(); */

 

//新的写法 构造器和类分开了

class User{

//构造器

constructor(name,pass){

this.name = name;

this.pass = pass;

}

showName(){

alert(this.name);

}

showPass(){

alert(this.pass);

}

}

 

class VipUser extends User{

//构造器

constructor(name,pass,level){

super(name,pass);//执行父类的构造函数

this.level = level;

}

 

showLevel(){

alert(this.level);

}

}

 

var v1 = new VipUser(‘blue‘,‘123456‘,3);

v1.showName();

v1.showPass();

v1.showLevel();

 

面向对象的应用-React

 

React:

1.组件化-class

2.强依赖JSX(==babel==browser.js)

 

JSX -JS的扩展版

---------------------------------

 

7.JSON

 

JSON.stringify({a:12,b:5}) => ‘{"a":12,"b":5}‘

JSON.parse(‘{"a":12,"b":5}‘)=> {a:12,b:5}

 

1.JSON对象

JSON.stringify stringify:字符串化,变成字符串

JSON.parse;//解析

 

2.简写

名字和值(key和value)一样,留一个就行

let a = 12;

let b = 5;

 

//let json = {a:a,b:b,c:55};//key和value一样

let json = {a,b,c:55};//key和value一样

 

console.log(json);

 

 

方法 :function 一块删除

let json = {

a:12,

/* show:function(){

alert(this.a);

} */

show(){ //去掉:function

alert(this.a);

}

};

json.show();

 

 

json的标准写法:

1.只能用双引号

2.所有的名字都必须用引号包起来

 

{a:12,b:5} 错

{"a":12,"b":5} 对

 

{a:‘abc‘,b:5} 错

{"a":"abc","b":5} 对

 

8.Promise---------承诺

 

封装异步操作

Promise.all([]);

 

 

异步:操作之间没啥关系,同时进行多个操作。

同步:同时只能做一件事

 

异步:代码更复杂

同步:代码简单

 

异步:

ajax(‘/banners‘,function(banner_data){

ajax(‘/hotItems‘,function(/hotitem_data){

},function(){

alert(‘读取失败‘);

});

 

},function(){

alert(‘读取失败‘);

});

 

同步:

let banner_data = ajax_async(‘/banners‘);

let hotitem_data = ajax_async(‘/hotItems‘);

 

Promise--------- 消除异步操作

* 用同步一样的方式,来书写异步代码

 

Promise到底怎么用

 

 

有了Promise之后的异步:

Promise.all([$.ajax(),$.ajax()]).then(results=> {

//对了

},error=>{

//错了

});

race(竞赛,赛车,)

Promise.all 都,一个都不能少,&的含义

Promise.race 竞速 同时读五个资源,谁先来就用谁的

 

 

9.generator --生成器

 

function *show(){

yield

}

 

 

generat --生成

 

普通函数 ---一路到底

generator函数 ---中间能停,踹一脚走一步

 

function *show(){

alert(‘a‘);

 

yield;//放弃,暂时放弃执行

 

alert(‘b‘);

}

let genObj = show();

 

//console.log(genObj);

genObj.next();

genObj.next();

 

yield传参

 

yield返回

 

 

10.模块化

 


推荐阅读
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 基于layUI的图片上传前预览功能的2种实现方式
    本文介绍了基于layUI的图片上传前预览功能的两种实现方式:一种是使用blob+FileReader,另一种是使用layUI自带的参数。通过选择文件后点击文件名,在页面中间弹窗内预览图片。其中,layUI自带的参数实现了图片预览功能。该功能依赖于layUI的上传模块,并使用了blob和FileReader来读取本地文件并获取图像的base64编码。点击文件名时会执行See()函数。摘要长度为169字。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 安卓select模态框样式改变_微软Office风格的多端(Web、安卓、iOS)组件库——Fabric UI...
    介绍FabricUI是微软开源的一套Office风格的多端组件库,共有三套针对性的组件,分别适用于web、android以及iOS,Fab ... [详细]
author-avatar
痴痴傻傻
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有