ES6简述
啥是ES6
大家都知道,JavaScript由DOM、BOM、ECMAScript组成,ECMAScript是标准。
ES6的全称其实是ES2015(6.0)每年更新,依次类推
ES2016(7)
...
ES2019(10)
为啥要推ES6
两个字:方便。不用ES6也能写,使用ES6就是为了方便,能用更少的代码去做更多的事情,为了提高工程性。
ES6有哪些东西
变量
let用于声明变量
const用于声明常量,且不可修改
相比var,ES6的变量有啥好处
1.禁止重复声明
ES5
var a = 12;
var a = 5;
console.log(a)
输出为5,一点问题没有
ES6
let a = 12;
let a = 5;
console.log(5)
它会告诉你a已经被定义过了,不能重复定义
2.控制修改
const a = 5;
a = 12;
console.log(a);
它告诉你你给常量赋值,这是不行的
3.支持块级作用域
ES5只有函数级作用域
function sum(a, b) {
return a+b;
}
console.log(a)
这时候它在外面是访问不到a的
ES6有块级作用域
- {}
- if(){}
- for(){}
- {}
{
var a = 12;
}
console.log(a);
输出12
{
let a = 12;
}
console.log(a);
解构赋值
不用解构赋值
//后台读取的数据
var json = {age: 12,height: 168}
console.log(json.age,json.height);
用完解构赋值
let {age,height} = {age: 12,height: 168};
console.log(age,height)
你就不需要去点了
注意事项
1.左右两边一样
let {a,b,c}={a: 12, b: 55, c: 99};//同是对象
let [a,b,c]=[12,5,8];//同是数组
2.右边得是个东西
let {a,b,c} = {12,5,13};//右边是啥,对象?数组?都不是
函数
箭头函数
使用箭头函数不仅写起来简单而且能修复this的问题
1.简单
ES5
- function xx() {}
- var xx = function() {}
ES6
let xx = (参数)=>{} - 有且仅有一个参数 ()可以省略
- 有且仅有一条语句 return {}可以省略
let show=()=>({a: 12, b: 5});//用()包一下
2.修复this
ES5
在ES5,谁调用this,this就是谁
在ES6,this绑定在当前的环境
参数展开
(1)剩余参数
function show(a, b, ...arr){
console.log(a, b, arr);
}
show(12,5,44,7,85,34,33);
12,5,44,7,85,34,33
注意:必须是最后一个
function show(a, b, ...arr, c){
console.log(a, b, arr, c);
}
show(12,5,44,7,85,34,33);
剩余参数必须得是最后一个形参
(2)数组展开
...arr等价于1,5,12,3
let arr = [1,5,12,3];
var sum=(a, b, c, d)=>a+b+c+d;
console.log(sum(...arr))
21
let arr = [1, 2, 3];
let arr2 = [4, 5, 6];
let arr3 = [...arr1, ...arr2];
console.log(arr3);
1,2,3,4,5,6
系统对象
Array
4个API,由对象来调用
map 映射
forEach 循环
filter 过滤(删除)
reduce 减少
(1)map
映射:1对1,进去100个,出来100个
var scores = [100,60,52,48,98,13,45,66,75,98];
//两个参数item,index
var res = scores.map((item)=>item>=60);
console.log(scores,res);
(2)forEach
把true筛出来
let arr = [1,5,12];
arr.forEach((item,index)=>{
console.log(`第${index}个:${item}`);
});
第0个:1
第1个:5
第2个:12
(3)filter
let scores = [1,2,3,5,6,95,63,45,68,60];
let pass = scores.filter((item)=>item>=60);
console.log(pass)
(4) [95, 63, 68, 60]
(4)reduce
求和
let arr = [1,5,3,16];
let res = arr.reduce((temp,item,index)=>{
console.log(`temp:${temp}`);
return temp+item;
});
console.log(`res:${res}`);
temp:1//第一次是第一个数
temp:6//后面都是和
temp:9
res:25
求平均数
let arr = [1,5,3,16];
let res = arr.reduce((temp,item,index)=>{
if(index<arr.length - 1)
return temp+item;
else
return (temp+item)/2;
});
console.log(`res:${res}`);
String
(1)字符串模板
let name = '小明';
console.log(`name : ${name}`);
name : 小明
好处:能折行,对于大段的东西很适用
let str = `<div>
<p>第一行${item1}</p>
<span>第二行${item2}</span>
</div>`;
(2)startsWith
let url = 'http://www.baidu.com';
if(url.startsWith('http')||url.startsWith('https')) console.log('是网址');
else console.log('不是网址')
(3)endsWith
JSON
标准写法:
let json = {"name":"zhangsan","age":12};
- stringify:对象转json
let xiaoming = {
name: 'xiaoming',
age: 25
};
console.log(JSON.stringify(xiaoming));
{"name":"xiaoming","age":25}
- parse:字符串转对象
let json = '{"name":"xiaoming","age":25}';
console.log(JSON.parse(json));
{name: "xiaoming", age: 25}
异步操作
- 优点:程序性能好,资源利用率高、用户体验好
- 缺点:程序员体验不好
问题:按顺序拉取数据
环境:服务器
我用的是WampServer
data/1.json
{a: 1}
./data/2.json
{b: 12}
./data/3.json
{c: 16}
./html
$.ajax({
url: 'data/1.json',
dataType: 'json',
success(data1) {
$.ajax({
url: 'data/2.json',
dataType: 'json',
success(data2) {
$.ajax({
url: 'data/3.json',
dataType: 'json',
success(data3) {
console.log(data1,data2,data3)
}
});
}
});
}
});
{a: 1} {b: 12} {c: 16}
因为这种写法恶心,所以Promise出现了
了解一下Promise,其实jQuery的ajax也是Promise
let p=new Promise(function (resolve, reject){//resolve成功,reject失败
$.ajax({
url: 'data/1.json',
dataType: 'json',
success(data){
resolve(data);
},
error(res){
reject(res);
}
});
});
p.then(function (data){
alert('成功');
console.log(data);
}, function (res){
alert('失败');
console.log(res);
});
怎么用
Promise.all([
$.ajax({url:'data/1.json', dataType: 'json'}),
$.ajax({url:'data/2.json', dataType: 'json'}),
$.ajax({url:'data/3.json', dataType: 'json'})
]).then(([data1,data2,data3])=>{
console.log(data1,data2,data3);
},(res)=>{
alert('错了')//一个接口出错就不渲染
})
{a: 1}a: 1__proto__: Object
{b: 12}b: 12__proto__: Object
{c: 16}c: 16__proto__: Object
但是Promise有个致命的缺点,处理不了逻辑(第一个数据可能决定后面读什么)
因此async/await登场了,专门配合Promise,用同步的方法来写异步。
但是其实编译完还是恶心的嵌套,只不过不需要我们程序员来写,编译就完了
let show = async ()=> {
let data1 = await $.ajax({url: 'data/1.json', dataType: 'json'});//await后面跟的是Promise
let data2 = await $.ajax({url: 'data/2.json', dataType: 'json'});
let data3 = await $.ajax({url: 'data/3.json', dataType: 'json'});
console.log(data1,data2,data3)
}
show();
{a: 1} {b: 12} {c: 16}
处理逻辑
let show = async ()=> {
let data1 = await $.ajax({url: 'data/1.json', dataType: 'json'});
if(data1<10) {
let data2 = await $.ajax({url: 'data/2.json', dataType: 'json'});
console.log(data1,data2)
}else {
let data3 = await $.ajax({url: 'data/3.json', dataType: 'json'});
console.log(data1,data3)
}
}
show();
{a: 1} {c: 16}
ES6简述的更多相关文章
- 简述ES5 ES6
很久前的某一天,一位大神问我,你知道ES6相对于ES5有什么改进吗? 我一脸懵逼的反问,那个啥,啥是ES5.ES6啊. 不得不承认与大神之间的差距,回来深思了这个问题,结合以前的知识,算是有了点眉目. ...
- ES6 开发常用新特性以及简述ES7
一.关于变量 ES6新增:块级作用域变量 1.let定义块级作用域变量 没有变量的提升,必须先声明后使用 let声明的变量,不能与前面的let,var,conset声明的变量重名 { { consol ...
- 简述ES6其他的东西
第一是修饰器是ES7的一个提案,现在Babel转码器已经支持.那么什么是修饰器呢,修饰器是对类的行为的改变,在代码编译时发生的,而不是在运行时发生的且修饰器只能用于类和类的方法.修饰器可以接受三个函数 ...
- 简述es6各种简单方法
1.取代var的let和const 局部变量都可以使用let 固定变量都可以使用const 2.字符串的变化 反引号的使用 3.解构赋值 let [a, b, c] = [1, 2, 3]; let ...
- JavaScript作用域闭包简述
JavaScript作用域闭包简述 作用域 技术一般水平有限,有什么错的地方,望大家指正. 作用域就是变量起作用的范围.作用域包括全局作用域,函数作用域以块级作用域,ES6中的let和const可以形 ...
- React入门 (1)—使用指南(包括ES5和ES6对比)
前言 本篇会简明扼要的介绍一下React的使用方法.代码会用JSX+ES5和JSX+ES6两种方式实现. React简介 React来自Facebook,于2013年开源.至今不断修改完善,现在已经到 ...
- 前端面试题总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)
写在前面 参考答案及资源在看云平台发布,如果大家想领取资源以及查看答案,可直接前去购买.一次购买永久可看,文档长期更新!有什么意见与建议欢迎您及时联系作者或留言回复! 文档描述 本文是关注微信小程序的 ...
- ES6进阶之路
1.说出至少5个ES6的新特性,并简述它们的作用. . let关键字,用于声明只在块级作用域起作用的变量. . const关键字,用于声明一个常量. . 结构赋值,一种新的变量赋值方式.常用于交换变量 ...
- ES6语法知识
let/const(常用) let,const用于声明变量,用来替代老语法的var关键字,与var不同的是,let/const会创建一个块级作用域(通俗讲就是一个花括号内是一个新的作用域) 这里外部的 ...
随机推荐
- 20145239 《Java程序设计》第5周学习总结
20145239 <Java程序设计>第5周学习总结 教材学习内容总结 (一)掌握try...catch...finally处理异常的方法: 程序中有许多意想不到的错误,所以我们要学会一些 ...
- uboot移植添加nfs支持
手头6410开发板uboot(基于2011.06)其他功能包括ping和tftp都执行正常,唯独缺少nfs. 只需要在其配置文件(每个开发板文件通常名称不同,include/configs/*6410 ...
- Too many open files解决方案及原理
以下是我解决Too many open files异常时学习的知识的理解和总结,如有不正确指出,敬请指出! 此问题中文搜索雷同,你可以尝试以下关键字:"file descriptor lea ...
- Codeforces 148D Bag of mice:概率dp 记忆化搜索
题目链接:http://codeforces.com/problemset/problem/148/D 题意: 一个袋子中有w只白老鼠,b只黑老鼠. 公主和龙轮流从袋子里随机抓一只老鼠出来,不放回,公 ...
- html5--1.7超链接上
html5--1.7超链接上 一.超链接的5种形式 <!DOCTYPE html> <html lang="en"> <head> <me ...
- ORA-00600: internal error code, arguments: [6749], [3], [12602196]
环境信息:Linux5.8 oracle10.2.0.4 问题现象: 现象1:alert日志有大量下面的错误信息: Wed Aug 27 21:01:27 2014Errors in file /u0 ...
- Linux_服务器_04_vim编辑器的使用
二.参考文档 1.linux系统中如何进入退出vim编辑器,方法及区别
- storm源码剖析(1):storm脚本
今天看了一下storm的命令行脚本${STORM_HOME}/bin/storm,现在将剖析过程整理一下,作为记录.注:使用的storm版本为0.8.0. ${STORM_HOME}/bin/stor ...
- Python 实现「食行生鲜」签到领积分
用过食行生鲜的同学应该知道,每天可以在食行生鲜签到,签到可以领到 20 积分,在购物时可以抵 2 毛钱.钱虽少,但是积少成多,买菜时可以抵扣一两块钱还是不错的. 今天我们就用 Python 来实现自动 ...
- MySQL_各城市在线产品天订单数据20161130
#sealreport010 `tb010_02d`各城市在线产品天订单数据 #sealreport010 `tb010_02d`各城市在线产品天订单数据 SELECT d.ID,a.城市,a.在线日 ...






