es6总结
主要包括let const,模板字符串,解构赋值,箭头函数,扩展运算符,Promise,类,import export等
一、let和const
1.let所声明的变量只在let所在的代码块内有效。let相当于es5用一个函数把变量包裹了。
const声明一个只读的常量。一旦声明,常量的值就不能改变。一旦声明就必须立即初始化。
2.const声明的变量也只在所声明的块级作用域内有效。
3.let声明的变量和const声明的常量不会提示,只能在声明后使用。
4..let声明的变量和const声明的常量都不能重复声明。
二、模板字符串
模板字符串用反引号(`)标识。可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。
//当作普通字符串
`In JavaScript '\n' is a line-feed.`
//定义多行字符串 空格和缩进会保留
`In JavaScript this is
not legal`
//在字符串中嵌入变量 将变量写在${}中
var name='Tom';
`hello,${name}!`
如果在模板字符串中需要使用反引号,则加反斜杠转义。
如果模板字符串中的变量没有声明则会报错。
三、解构赋值
es6允许按照一定的模式从数组和对象中取值,然后对变量进行赋值,这被称为解构赋值。
1.数组的解构赋值
let [a,b,c]=[1,2,3];
let [foo,[[bar],baz]]=[1,[[2],3]];
let [foo]=[];//解构不成功,foo=undefined
//不完全解构如下
let [x,y]=[1,2,3];//x=1 y=2
let [a,[b],c]=[1,[2,3],4];//a=1 b=2 c=4
如果等号右边不是数组,将会报错
解构赋值允许指定默认值
let [foo=true]=[];//foo=true
let [x,y='b']=['a'];//x='a' y='b'
如果一个数组成员不严格等于undefined则默认值不会生效,null不严格等于undefined
let [x=1]=[undefined];//x=1
let [x=1]=[null];//x=null
默认值可以引用解构赋值的其他变量,但该变量必须已经声明。
2.对象的解构赋值
let {foo,bar}={foo:"aaa",bar:"bbb"};//foo:"aaa" bar:"bbb"
变量必须与属性同名才能取到正确的值
let {foo:baz}={foo:"aaa"};//baz="aaa" foo is not defined
对象的解构赋值的内部机制是先找到同名属性,然后赋值给对应的变量。foo是匹配的模式,baz才是变量,真正被赋值的是baz。
对象的解构也可以指定默认值。默认值生效的条件是对象的属性值严格等于undefined。如果解构失败,变量的值等于undefined。
let{log,sin,cos}=Math;
以上代码将Math对象的对数、正弦、余弦三个方法赋值到对应的变量上,使用方便。
let arr=[1,2,3];
let {0:first,[arr.length-1]:last}=arr;
first//1
last//3
数组的本质是对象,可以对数组进行对象属性的解构。
3.字符串的解构赋值
const [a,b,c,d,e]='hello';
a//'h'
b//'e'
let {lenth:len}='hello';
len//5
4.函数参数的解构赋值
function add([x,y]){
return x+y;
}
add([2,3]);//5
function move1({x=0,y=0}={}){
return [x,y];
}
move({x:3,y:8});//[3,8]
move({x:3});//[3,0]
move({});[0,0]
move();//[0,0]
function move2({x,y}={x:0,y:0}){
return [x,y];
}
move({x:3,y:8});//[3,8]
move({x:3});//[3,undefined]
move({});[undefined,undefined]
move();//[0,0]
四、箭头函数
1.var f=v=>v;
等同于
var f=function(v){
return v;
}
2.如果箭函数不需要参数或需要多个参数,就使用圆括号把参数括起来
var f=()=>5;
var sum=(num1,num2)=>num1+num2;
3.如果箭头函数的代码块部分不止一个语句,要用大括号括起来。
var sum=(num1,num2)=>{num1+num2};
4.如果箭头函数直接返回一个对象,必须在对象外面加上括号。
var getItem=id=>({id:id,name:"Temp"});
5.箭头函数可以与变量解构结合使用。
const full=({first,last})=>first+' '+last;
等同于
function full(person){
return person.first+' '+person.last;
}
6.函数体内的this对象就是定义时所在的对象,而不是使用时所在的对象。this的指向是可变的,但在箭头函数中是固定的。箭头函数根本没有自己的this。
不可以当作构造函数,即不能new。
不可以使用arguments对象。
不可以使用yield命令。
箭头函数可以嵌套。
五、扩展运算符
1.扩展运算符是三个点(...),将一个数组转为用逗号分割的参数序列。
function add(x,y){
return x+y;
}
var numbers=[1,2];
add(...numbers);//3
2.可以替代数组的apply方法
Math.max(...[14,3,7]);//14
3.将一个数组添加到另一个数组的尾部
var arr1=[1,2];
var arr2=[3,4];
arr1.push(...arr2);
4.扩展运算符与解构赋值结合时,只能放在参数的最后一位。
5.扩展运算符可以将字符串转换为真正的数组,且能够正确识别32位的Unicode字符
[...'hello']
//['h','e','l','l','o']
六、Promise对象
Promise是异步编程的一种解决方案。
1.对象的状态不受外界影响。有3种状态:Pending(进行中)、Fulfilled(已成功)和Rejected(已失败)。只有异步操作的结果可以决定当前是哪一种状态。
一旦状态改变就不会再变,任何时候都可以得到这个结果。
2.Promise对象是一个构造函数,用来生成Promise实例。
var promise=new Promise(function(resolve,reject){
//...some code
if(/*异步操作成功*/){
resolve(value);
}
else{
reject(error);
}
});
Promise实例生成后,可用then方法分别指定Resolved状态和Rejected状态的回调函数。
promise.then(function(value){
//success
},function(error){
//failure
});
then方法指定的回调函数将在脚本所有同步任务执行完成后才会执行。
一般不要在then方法中定义Rejected状态的回调函数,而应使用catch方法。
七、类
es6中的class是一个语法糖,它的绝大部分功能es5都可以做到。class写法使对象原型的写法更加清晰,更像面向对象编程的语法。
八、import export
export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。
//m.js
var a=1;
var b=2;
export{a,b};
通过该接口可以取到模块内部实时的值。
//n.js
import {a,b} from './m.js';
import命令具有提升效果
import * from './m,js';//整体加载
使用export default命令可以为模块指定默认输出
export default function fun(){
//...
}
import fun from '...';
export和import的复合写法
export {foo,bar} from 'my_module';
const声明的常量只在当前代码块中有效,如果要被多模块共享,可以导出。
//constants.js
export const A=1;
export const B=2;
import * as constants from './constants';
console.log(constants.A);//1
es6总结的更多相关文章
- ES6模块import细节
写在前面,目前浏览器对ES6的import支持还不是很好,需要用bable转译. ES6引入外部模块分两种情况: 1.导入外部的变量或函数等: import {firstName, lastName, ...
- webpack+react+redux+es6开发模式
一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...
- ES6的一些常用特性
由于公司的前端业务全部基于ES6开发,于是给自己开个小灶补补ES6的一些常用特性.原来打算花两天学习ES6的,结果花了3天才勉强过了一遍阮老师的ES6标准入门(水好深,ES6没学好ES7又来了...) ...
- ES6(块级作用域)
我们都知道在javascript里是没有块级作用域的,而ES6添加了块级作用域,块级作用域能带来什么好处呢?为什么会添加这个功能呢?那就得了解ES5没有块级作用域时出现了哪些问题. ES5在没有块级作 ...
- es6小白学习笔记(一)
1.let和const命令 1.es6新增了let和const命令,与var用法类似,但它声明的变量只在let所在的代码块内有效(块级作用域,es5只有全局和函数作用域) { let a = 1; v ...
- ES6之变量常量字符串数值
ECMAScript 6 是 JavaScript 语言的最新一代标准,当前标准已于 2015 年 6 月正式发布,故又称 ECMAScript 2015. ES6对数据类型进行了一些扩展 在js中使 ...
- ES6之let命令详解
let与块级作用域 { var foo='foo'; let bar='bar'; } console.log(foo,'var'); //foo varconsole.log(bar ,'bar') ...
- ES6 箭头函数中的 this?你可能想多了(翻译)
箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点——“=> 就是一个新的 function”. ...
- ES6+ 现在就用系列(二):let 命令
系列目录 ES6+ 现在就用系列(一):为什么使用ES6+ ES6+ 现在就用系列(二):let 命令 ES6+ 现在就用系列(三):const 命令 ES6+ 现在就用系列(四):箭头函数 => ...
- ES6+ 现在就用系列(一):为什么使用ES6+
系列目录 ES6+ 现在就用系列(一):为什么使用ES6+ ES6+ 现在就用系列(二):let 命令 ES6+ 现在就用系列(三):const 命令 ES6+ 现在就用系列(四):箭头函数 => ...
随机推荐
- python基础之元组,集合
一.元组 为何要有元组,存放多个值,元组不可变,更多的是用来做查询 t=(,[,],,)) #t=tuple((,[,],,))) print(type(t)) 元组可以作为字典的key d={(,, ...
- Java内部类的总结
内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. 内部类分为: 成员内部类.局部内部类.静态嵌套类.匿名内部类 . 1.成员内部类 成员内部类是最普通的内部类,它的定义为位于另一个类 ...
- JVM(五)内存(Heap)分配
前面的两小节,我分享了一下JVM的垃圾回收算法和垃圾回收器,本节中,我们来看看JVM的内存分配到底是如何进行的,作为对前面两节内存回收的补充. 从前面的内存回收中我们了解到,Hotspot JVM中的 ...
- HCatalog
HCatalog HCatalog是Hadoop中的表和存储管理层,能够支持用户用不同的工具(Pig.MapReduce)更容易地表格化读写数据. HCatalog从Apache孵化器毕业,并于201 ...
- 移动端效果之Swiper
写在前面 最近在做移动端方面运用到了饿了么的vue前端组件库,因为不想单纯用组件而使用它,故想深入了解一下实现原理.后续将会继续研究一下其他的组件实现原理,有兴趣的可以关注下. 代码在这里:戳我 1. ...
- VB.net DateTimePicker 初始化为空,选择后显示日期
目的:当某记录的日期数据为空的时候,DateTimePicker 不以默认当前时间显示. 优点:避免不规则的时间格式输入:符合平时遇到的时间输入习惯 缺点:设置要代码,没有textbox控件那么方便设 ...
- FPGA与Deep Learning
你还没听过FPGA?那你一定是好久没有更新自己在IT领域的知识了. FPGA全称现场可编程门阵列(Field-Programmable Gate Array),最初作为专用集成电路领域中的一种半定制电 ...
- C#获取本周第一天和最后一天
DateTime nowTime = DateTime.Now; #region 获取本周第一天 //星期一为第一天 int weeknow = Convert.ToInt32(nowTime.Day ...
- ZOJ1181 Word Amalgamation 字符串 排序查找
传送门:ZOJ1181 思路:自身排序来判断两个字符串拥有相同的字符. #include<cstdio> #include<cstdlib> #include<io ...
- HashMap实现原理
学习笔记之HashMap篇,简单学习了解HashMap的实现原理和扩容. 大家都知道HashMap处理数据很快,时间复杂度O(1),那么是怎么做到的呢?那就先了解一下常见数据结构. 一般来说,我们把存 ...