主要包括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总结的更多相关文章

  1. ES6模块import细节

    写在前面,目前浏览器对ES6的import支持还不是很好,需要用bable转译. ES6引入外部模块分两种情况: 1.导入外部的变量或函数等: import {firstName, lastName, ...

  2. webpack+react+redux+es6开发模式

    一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...

  3. ES6的一些常用特性

    由于公司的前端业务全部基于ES6开发,于是给自己开个小灶补补ES6的一些常用特性.原来打算花两天学习ES6的,结果花了3天才勉强过了一遍阮老师的ES6标准入门(水好深,ES6没学好ES7又来了...) ...

  4. ES6(块级作用域)

    我们都知道在javascript里是没有块级作用域的,而ES6添加了块级作用域,块级作用域能带来什么好处呢?为什么会添加这个功能呢?那就得了解ES5没有块级作用域时出现了哪些问题. ES5在没有块级作 ...

  5. es6小白学习笔记(一)

    1.let和const命令 1.es6新增了let和const命令,与var用法类似,但它声明的变量只在let所在的代码块内有效(块级作用域,es5只有全局和函数作用域) { let a = 1; v ...

  6. ES6之变量常量字符串数值

    ECMAScript 6 是 JavaScript 语言的最新一代标准,当前标准已于 2015 年 6 月正式发布,故又称 ECMAScript 2015. ES6对数据类型进行了一些扩展 在js中使 ...

  7. ES6之let命令详解

    let与块级作用域 { var foo='foo'; let bar='bar'; } console.log(foo,'var'); //foo varconsole.log(bar ,'bar') ...

  8. ES6 箭头函数中的 this?你可能想多了(翻译)

    箭头函数=>无疑是ES6中最受关注的一个新特性了,通过它可以简写 function 函数表达式,你也可以在各种提及箭头函数的地方看到这样的观点——“=> 就是一个新的 function”. ...

  9. ES6+ 现在就用系列(二):let 命令

    系列目录 ES6+ 现在就用系列(一):为什么使用ES6+ ES6+ 现在就用系列(二):let 命令 ES6+ 现在就用系列(三):const 命令 ES6+ 现在就用系列(四):箭头函数 => ...

  10. ES6+ 现在就用系列(一):为什么使用ES6+

    系列目录 ES6+ 现在就用系列(一):为什么使用ES6+ ES6+ 现在就用系列(二):let 命令 ES6+ 现在就用系列(三):const 命令 ES6+ 现在就用系列(四):箭头函数 => ...

随机推荐

  1. PowerShell脚本—停止占用8080端口的进程

    $str = netstat -ano $list = $str.Split('\n') ; $i -lt $list.Length; $i++) { $item_list = [System.Tex ...

  2. cxgrid学习

    delphi cxgrid控件哪个属性是设置不能编辑? cxgrid控件cxgridDBTable的OptionsData可以选择操作 cxGrid1DBTableView1下选择cxGrid1DBT ...

  3. JavaScript中的for in循环

    在学习AJAX的时候,发现JavaScript中for in循环,这种循环对于遍历JSON是很好用的.于是写下了这篇博文 作用 for in循环本质上是forEach循环,它主要有两个作用 遍历数组 ...

  4. java: Multiple encodings set for module chunk test "GBK" will be used by compiler

    IDEA 进行编译代码的时候,特别是新项目 特别容易出现 编码错误,但是 File-Encoding中设置的又没有问题,而且maven 是能打包的,就是用 idea 自带的 编译的时候 就会出现提示 ...

  5. 月亮之眼_KEY

    [问题描述] 吉儿是一家古董店的老板娘,由于她经营有道,小店开得红红火火.昨天,吉儿无意之中得到了散落民间几百年的珍宝--月亮之眼.吉儿深知"月亮之眼"价值连城:它是由许多珍珠相连 ...

  6. Oracle 每隔5分钟产生2个clsc*.log文件

    环境: OS:HP-UNIX 数据库:11.2.0.4   双机RAC (一)现象 在清理Oracle日志的时候,发现在$ORACLE_HOME/log/{instance_id}/client下面存 ...

  7. 【京东账户】——Mysql/PHP/Ajax爬坑之页头页尾加载

    一.引言 实现京东的账户项目,有一个小功能,页头页尾加载.要用到的是Apach环境,Mysql.PHP以及Ajax. 二.实现 原理: 用php文件分别写一个的页头和一个页尾,放在前后两个div里. ...

  8. JS之脚本延迟

    自从开了博客,我就一下班回来匆匆吃完饭门一关等一开电脑一打开匆匆的研究东西,以至于朋友们都怀疑我是不是都得了自闭症 其实因为我有恐惧心理怕自己的技术哪天跟不上社会了,说到技术我觉得技术不求越新越好,但 ...

  9. 如何在linux下检测内存泄漏

    之前的文章应用 Valgrind 发现 Linux 程序的内存问题中介绍了利用Linux系统工具valgrind检测内存泄露的简单用法,本文实现了一个检测内存泄露的工具,包括了原理说明以及实现细节. ...

  10. CPU工作方式、多核心、超线程技术详解[转贴]

    CPU是一台电脑的灵魂,决定电脑整体性能.现在的主流CPU都是多核的,有的运用了多线程技术(Hyper-threading,简称HT).多核可能还容易理解些,相信不少玩家都能说出个所以然.但超线程是个 ...