ESMAScript6.0

ES6 兼容

IE10+ 、Chrome、Firefox

要想兼容IE10以下的有两种方法:

  • 用 babel 工具 borwer.js ,在 script 标签里添加 type="text/babel" 属性

变量let和const

  • let :用于定义变量,不能重复声明

  • const :用于定义常量,不能重复声明

箭头函数

箭头函数有效更改 this 的指向。

show((item) => {
return alert(item); //
});
show(13);

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

show(item =>{
return alert(item); //
});
show(13);

如果只有一个 return ,可以省掉{ }和 return

show = item => alert(item);  //
show(13);

函数-参数

收集参数: ...args

Rest Parameter 必须是最后一位

let arr = [1,2,3];
function show(a,b,...args){
alert(args); // 35,57,18,45
}
show(13,14,35,57,18,45);
function show2(a,b,c){
alert(a); //
alert(b); //
alert(c); //
}
show2(...arr);

展开数组: ...args

展开后的效果,跟直接把数组的类容写在哪儿一样

let arr = [1,2,3];
let arr2 = [4,5,6];
function show(...args){
fu(...args);
}
function fu(a,b,...args){
console.log(a,b); // 1 2
console.log(a,b,...args); // 1 2 3 4 5 6
}
show(...arr,...arr2);

默认参数: (a,b,c=10)

当我们传递 c=1000  时 c=10 将会被替换。

如果没有给c设置参数,那么它的值默认为10。

function show(a,b,c=10){
console.log(a,b,c);
}
show(10,100,1000); // 10 100 1000
// show(10,100); // 10 100 10

解构赋值

  • 左右两边结构相同

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

let [a,b,c] = [1,2,3];
console.log(a,b,c); // 1 2 3
let {a,b,c} = { a:1, c:3, b:2 };
console.log(a,b,c); // 1 2 3
let [{ a,b },[n1,n2,n3],num,str] = [{ a:1, b:6 },[12,24,32],58,'结构赋值']
console.log(a,b,n1,n2,n3,num,str); // 1 6 12 24 32 58 "结构赋值"

也可以根据右边的参数的类型进行返回相应的参数

let [json,arr,num,str] = [{ a:1, b:6 },[12,24,32],58,'结构赋值']
console.log(json,arr,num,str); // { a: 1, b: 6 } [12, 24, 32] 58 "结构赋值"

数组

map:映射(一个对一个)

let arr = [3,43,12];
arr.map(function (item){
alert(item); // 3 43 12
})

设置返回值:

let arr = [3,43,12];
let result = arr.map(function (item){
return item * 2
})
alert(result); // 6 86 24

简写(箭头函数):

let arr = [3,43,12];
let result = arr.map( item => item*2 )
alert(result); // 6 86 24

实列:

let score = [19,85,25,90];
const result = score.map(item => item >= 60 ? '及格' : '不及格');
console.log(score); // [19, 85, 25, 90]
console.log(result); // ["不及格", "及格", "不及格", "及格"]

reduce:汇总(一堆出来一个)

计算:

/**
* @param tmp (上一轮的结果)
* @param item (arr里的数依次传递给item)
* @param index (次数)
*/
let arr = [12,155,64,74]
let result = arr.reduce(function (tmp,item,index){
return tmp + item;
})
alert(result); // 305
let arr = [12,155,64,74]
let result = arr.reduce(function (tmp,item,index){
if(index != arr.length-1){ // 不是最后一次
return tmp + item;
}else{ // 最后一次
return (tmp + item)/arr.length;
}
})
alert(result); // 76.25

filter:过滤器

保留能被3整除的数

let arr = [12,54,35,75,11,24];
const result = arr.filter(function (item){
if(item % 3 == 0){
return true;
}else{
return false;
}
})
alert(result); // 12,54,75,24

简写:

let arr = [12,54,35,75,11,24];
const result = arr.filter(function (item){
return item % 3 == 0;
})
alert(result); // 12,54,75,24

实列:

let arr = [
{ item: '手机', price: 5600},
{ item: '电脑', price: 14000},
{ item: '电视', price: 7600},
{ item: '显示屏', price: 3600}
]
const result = arr.filter(json => json.price >= 6000);
console.log(result); // [{ item: '电脑', price: 14000} { item: '电视', price: 7600}]

forEach:循环(迭代)

对数组里的数循环

let arr = [12,54,35];
arr.forEach( (item,index) =>{
alert(index + '---' + item); // 0---12 1---54 2---35
})

字符串

startsWith和endsWith方法

  • startsWith

let str = 'https://www.baidu.com';
if(str.startsWith('http://')){
alert('普通网址');
}else if(str.startsWith('https://')){
alert('加密网址');
}else if(str.startsWith('git://')){
alert('git网址');
}else if(str.startsWith('svn://')){
alert('svn网址');
}else {
alert('其它');
}
  • endsWith

let str = '1.txt';
if(str.endsWith('.txt')){
alert('文本文件');
}else if(str.endsWith('.jpg')){
alert('JPG图牌');
}else {
alert('其它');
}

字符串模板

${ name }  直接把变量名放进字符串里面,可以折行。

字符串连接 :

let a = 15;
let str = `a,${a},b,c`;
alert(str); // a,15,b,c

字符串连接实列:

let title = '标题';
let content = '内容';
let str = <div>
<h1>${title}</h1>
<p>${content}</p>
</div>;
alert(str);

面向对象

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

2.可以在 class 里直接加方法

class User{
constructor(name,pass){
this.name = name;
this.pass = pass
}
showName(){
alert(this.name); // Snaek
}
showPass(){
alert(this.pass); //
}
}
const ul = new User('Snaek','123456');
ul.showName();
ul.showPass();

继承:

class VipUser extends User{
constructor(name,pass,level){
super(name,pass);
this.level = level;
}
showLevel(){
alert(this.level);
}
}
const vl = new VipUser('Snaek','123456',12);
vl.showName(); // Snaek
vl.showPass(); //
vl.showLevel(); //

JSON对象/简写

JSON

JSON.stringify();

let str = { a: 12, b: 54 };
let json = JSON.stringify(str);
console.log(json); // {"a":12,"b":54}
JSON.parse(); let str = '{ "a":12, "b":32, "c":"abc" }';
let json = JSON.parse(str);
console.log(json); // {a: 12, b: 32, c: "abc"}

简写

名字和值( key 和 value )一样可以简写

let [a,b] = [12,5];
let json = { a, b, c: 55 };
console.log(json); // {a: 12, b: 5, c: 55}

方法在 json 里可以把: function 去掉

let json = {
a: 12,
/* show: function(){ */
show(){
alert(this.a); //
},
};
json.show();

Promise

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

同步:同时只能做一件事。

Promise.all

Promise : 用来消除异步操作,用同步一样方式,来写异步代码。

const p1 = Promise(function (resolve,reject){
$.ajax({
url: 'arr.txt',
dataType: 'json',
success(arr){
resolve(arr);
},
error(err){
reject(err);
}
})
});
const p2 = Promise(function (resolve,reject){
$.ajax({
url: 'json.txt',
dataType: 'json',
success(arr){
resolve(arr);
},
error(err){
reject(err);
}
})
});
Promise.all([
p1,p2
]).then(function (arr){
let [res1,res2] = arr;
alert('成功',res1);
console.log('成功',res2);
},function (err){
alert('失败',err;
});

简写

function createPromise(url){
return new Promise(function (resolve,reject){
$.ajax({
url,
dataType: 'json',
success(arr){
resolve(arr);
},
error(err){
reject(err);
}
})
});
}
Promise.all([
createPromise('arr.txt'),
createPromise('json.txt')
]).then(function (arr){
let [res1,res2] = arr;
alert('成功',res1);
console.log('成功',res2);
},function (err){
alert('失败',err;
});

在更高的 JQuery 版本中, ajax 自带 Promise 封装 ,我们可以简写成

Promise.all([
$.ajax({url:'arr.txt',dataType:'json'});
$.ajax({url:'json.txt',dataType:'json'});
]).then(function (arr){
let [res1,res2] = arr;
alert('成功',res1);
console.log('成功',res2);
},function (err){
alert('失败',err;
});

Promise.race

race 竞速,在多个请求中,那条请求地址先拿到数据,就先用那一条。

Promise.race([
$.ajax({url:'http://a1.baidu.com/data'});
$.ajax({url:'http://a3.baidu.com/data'});
$.ajax({url:'http://a4.baidu.com/data'});
$.ajax({url:'http://a2.baidu.com/data'});
]);

Generator

*号

generator 是一个函数,它可以让函数在执行的过程中停止(走走停停)。

generator 是将一个函数拆分成多个小函数,通过 next() 来自动执行它里面的小函数,从而实现停止(走走停停)。

generator 跟普通函数不一样,它会返回一个 generator 对象。

用法: 用*号代替 generator ,需要引入 runner 。

function * show(){
alert('a');
yield;
alert('b');
}
const genObje= show();
console.log(genObje);
genObje.next(); // a
// genObje.next(); // b

yield

yield 传参

在 next 传递参数,只会在 yield 后面起作用, yield 前面是接收不到 next 所传递的值.

在第一个 next 里传值是没有效果的。

function * show(){
alert('a');
yield;
alert('b');
}
const genObje= show();
console.log(genObje);
genObje.next(); // a
// genObje.next(); // b

yield 返回

yield 可以在中间拿到中间结果,并对中间所拿到的结果进行一些操作

function * show(){
let data1 = yield 13;
console.log(data1);
let data2 = yield 21;
console.log(data2);
return 32;
}
let genObje = show();
let res1 = genObje.next();
console.log(res1); // {value: 13, done: false}
let res2 = genObje.next();
console.log(res2); // {value: 21, done: false}
let res3 = genObje.next();
console.log(res3); // {value: 32, done: true}

async/await

async function readData(){
let data1 = await $.ajax({ url:'data/1txt', dataType:'json' });
let data1 = await $.ajax({ url:'data/2txt', dataType:'json' });
let data1 = await $.ajax({ url:'data/3txt', dataType:'json' });
console.log(data1,data2,data3);
}
readData();

ES6特性整理的更多相关文章

  1. 最常用的ES6特性(转)

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

  2. 最常用的ES6特性

    遇到了要写出es6新特性的题目,所以查阅了资料来总结一下,点击查看原文. 进入正题,最常用的ES6特性有:let, const, class, extends, super, arrow functi ...

  3. ES6特性

    一.ES6特性: let, const, class, extends, super, arrow functions, template string, destructuring, default ...

  4. 第四节:教你如何快速让浏览器兼容ES6特性

    写在正文前,本来这一节的内容应该放在第二节更合适,因为当时就有同学问ES6的兼容性如何,如何在浏览器兼容ES6的特性,这节前端君会介绍一个抱砖引玉的操作案例. 为什么ES6会有兼容性问题? 由于广大用 ...

  5. 解决浏览器兼容ES6特性

    为什么ES6会有兼容性问题? 由于广大用户使用的浏览器版本在发布的时候也许早于ES6的定稿和发布,而到了今天,我们在编程中如果使用了ES6的新特性,浏览器若没有更新版本,或者新版本中没有对ES6的特性 ...

  6. ES6知识整理(4)--数组的扩展

    最近工作比较忙,基本每天都会加班到很晚.处理一些客户端兼容问题以及提升用户体验的优化.也将近一周没更文了,现在继续es6的学习总结. 上篇回顾 ES6知识整理(三)--函数的扩展 扩展运算符 形式是3 ...

  7. 现在就可以使用的5个 ES6 特性

    小编推荐:掘金是一个高质量的技术社区,从 ECMAScript 6 到 Vue.js,性能优化到开源类库,让你不错过前端开发的每一个技术干货.各大应用市场搜索「掘金」即可下载APP,技术干货尽在掌握. ...

  8. 解决让浏览器兼容ES6特性

    为什么ES6会有兼容性问题? 由于广大用户使用的浏览器版本在发布的时候也许早于ES6的定稿和发布,而到了今天,我们在编程中如果使用了ES6的新特性,浏览器若没有更新版本,或者新版本中没有对ES6的特性 ...

  9. Swift 3到5.1新特性整理

    本文转载自:https://hicc.me/whats-new-in-swift-3-to-5-1/,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有. Hipo 2.0 重写从 Swif ...

随机推荐

  1. Python的10个神奇的技巧

    尽管从表面上看,Python似乎是任何人都可以学习的一种简单语言,但确实如此,许多人可能惊讶地知道一个人可以熟练掌握该语言. Python是其中的一门很容易学习的东西,但可能很难掌握. 在Python ...

  2. jenkins集成spring boot持续化构建代码

    我个人使用的是阿里云的云服务器,项目采用的是spring boot为框架,现在要做的功能就是将本地开发的代码提交到github中,通过jenkins自动化集成部署到云服务器.接下来开始步骤. 1 首先 ...

  3. 来自灵魂的拷问——知道什么是SQL执行计划吗?

    面试官说:工作这么久了,应该知道sql执行计划吧,讲讲Sql的执行计划吧! 看了看面试官手臂上纹的大花臂和一串看不懂的韩文,吞了吞口水,暗示自己镇定点,整理了一下思绪缓缓的对面试官说:我不会 面试官: ...

  4. 致敬平凡的程序员--《SOD框架“企业级”应用数据架构实战》自序

    “简单就是美” “平凡即是伟大” 上面两句话不知道是哪位名人说的,又或者是广大劳动人民总结的,反正我很小的时候就常常听到这两句话,这两句话也成了我的人生格言,而且事实上我也是一个生活过得比较简单的平凡 ...

  5. JDBC的开发步骤

    一.JDBC概述 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问, 它由一组用Jav ...

  6. 利用C#实现OPC-UA服务端

    前言 最近接手了一个项目,做一个 OPC-UA 服务端?刚听到这个消息我是一脸懵,发自灵魂的三问“OPC-UA是什么?”.“要怎么做?”.“有什么用?”.我之前都是做互联网相关的东西,这种物联网的还真 ...

  7. Linux下mv命令高级用法

    mv 也是 Linux 下一个使用频率非常高的命令,但除了一些基本用法,你还知道它的哪些高级用法呢? 1. 基本用法 移动一个/多个文件: 移动一个/多个目录: 重命名文件/目录. 这些都是很基本的用 ...

  8. python 07 字典 集合

    字典 key:value 键:值 映射,哈希值,关系(数组) x=['1','2'] y=['a','b'] >>print(y[x.index('1')]) a index() 函数用于 ...

  9. oracle 分页的两种方式

    实例:查询5-8名学生的姓名与成绩 --oracle的分页1 between 方式(分三次查询,第一次只作排序,第二次给表加上rownum序列,第三次为查询结果) select s.scorenumb ...

  10. you-get 下载B站上的视频

    安装you-get pip install you-get 安装好后,我们可以查看一下you-get的参数 you-get -h 视频下载 单个视频下载 CMD下载 you-get -o /data/ ...