ES 6

Posted Just 33

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES 6相关的知识,希望对你有一定的参考价值。

简介

 Node v4这个版本是Node和iojs合并后发布的首个稳定版本,并且为开发者带来了大量的ES6语言扩展。了解 Node.js中包括的ES6语言扩展。本课将会为你介绍如何使用这些新特性。

  Node.js 4.0.0 可以让您享受最尖端的技术,保持项目的先进性。其中对 v8 的升级几乎做到了与 Chromium / Google Chrome 同步,达到了 4.5.x,它提供了很多新的语言功能。ECMA-262 是 javascript 语言规范的最新版本,而且好多新特性数都是开箱即用的。这些新特性包括

  1. \'use strict\' :避免javascript上的一些陷阱,严格模式比非严格模式更加迅速,禁用了一些未来可能的语法
  2. let : var 不具备块级作用于的功能,只能用于函数内, let具有块级作用的功能如 {}
  3. const : 常量声明,作用于同let一样,其值不在变化

类:

  1. class : 类声明 class foo(){constructor(){}}, var f = new foo()
  2. 类表达式 : 匿名类表达式,var ploygon = class {},命名类表达式,var ploygon =class ploypon(){}
  3. static : 静态方法,var ploygon = class{constructor(){},static fn(){}},只能对象调用
  4. extends : 创建继承于某个类的子类 class a extends b{}

map:

  1. map : var m = new map([[键,值],[键,值]],...),存储键/值对,有size,set,get,has,delete,clear方法
  2. map便历方法 : keys遍历所有的键,values遍历所有的值,entries遍历所有的键值,forEach(function(){})遍历所有的键值
  3. for(var i of s) : 遍历s对象所有的值,for(var [x,y] of s)遍历s对象所有的键值
  4. for(var i in s) : 遍历s对象所有的键
  5. WeakMap : 以对象作为键,只有get,set,delete,has方法
  6. Set : 一种新的数据结构,类似数据,不会存贮重复的值,不会做类型装换及5,\'5\'是两个不同的值,有add,delete,clear,has方法,有constructor,size属性
  7. Set遍历方法 :keys,values,entries,forEach
  8. WeakSet : 只能存放对象只有add,delete,has方法没有size,constructor属性

Generator:

  1. generator : (状态机),有两个特征1,function* fn(){}表示generator  2,大括号{}内用yield = \'\'表示内容 。有next方法返回一个对象返回一个对象属性value表示yield表示的值,done表示是否迭代完毕,false表示还没完,true表示已经迭代完毕
  2. yield* : 用于generator内部嵌套一个generator,function* fin(){yield \'hello\',return },function* fout(){yield* fin}

Promise:

  1. promise : 用来处理异步操作,有两个特点 1:有三种状态 Pending(进行中),Resolved(以结束,又称为Fulfilled),Rejected(未完成,以失败),三种状态只能异步操作才能打断 2:只有两种变化从Pending到Resolved和Pending到Rejected,并且变化一旦发生就不能更改了
  2. 基本用法 : 写法比较固定,var p = new Promise(function(resolved,reject){/*some code*/  if(true){resolved(\'string\')}else{rejected(\'string\')}}),有个then方法p.then(successedfunction,filedFunction)两个回调函数参数1表示Pending->Resolved后调用,参数2Pending->Rejected后调用,方法catch的示意图。
  3. then方法返回promise对象,所以可以进行链式调用
  4. catch方法只有当Pending->Rejected的时候才返回一个promise对象,才可进行链式调用,通过throw抛出异常后再调用catch
  5. all方法参数可以是数组或者含有iterator接口的数据结构,成员都是Promise的实例,只有到所有的成员都返回Resolved状态的时候(类似于与门),all才返回Resolved否则返回Rejected
  6. race方法参数同all方法一样,返回最新状态变化的那个成员(不管是从Pending->Resolved,还是Pending->Rejected),改成员时promise对象(类似于或门)
  7. reject方法,参数为reason返回一个promise对象
  8. resolve方法,参数value,可以用then方法跟随者个value

Symbol :

  1. 添加一种数据类型Symbol,原有的javascript数据类型有6种:Undefined,Null,Object,Boolean,String,Number
  2. symbol作为属性名时只能放在[]内,不能利用.来获取。
  3. symbol不能利用for(var i in s)或者for(var i of s)来获得属性值,只能通过Object.getOwnPropertySymbols方法来获取,形参为含有Symbol属性的对象
  4. Symbol.for()与Symbol()的区别:var s1 = Symbol(\'foo\'),var s2 = Symbol(\'foo\'),s1 不等于 s2; var s1 = Symbol.for(\'foo\'),var s2 = Symbol.for(\'foo\'),s1等于时s2
  5. Symbol.keyFor方法查询已登记的Symbol.for()的值,var s1 = Symbol.for(\'foo\'),Symbol.keyFor(s1)等于foo,不能用于查询到登记Symbol()的值

箭头函数:

  1. ()=>{}等于function(){}, s=>s等于function(s){return s},(s1,s2)=>{s1+s2}等于function(s1,s2){return s1+s2},就是一个语法糖。
  2. 箭头函数注意点:1,箭头函数内部的this不可变;2,不能当作构造函数使用,及不能使用new; 3,行数内部不存在arguments对象,可用Rest对象代替;4,不用使用yield命令,所以就不用用于generator

模板字符串:

  1. 利用 ` 符号,键盘Tab上方的那个键,内部可以使用${expression}来占位,s = `hello ${`world`}`,s = 等于hello world
  2. 多行字符串 : 字符串内会保留换行符
  3. 表达式插补 : 字符串和表达式拼接的时候更加美观,方便 var a=1,b=1,  利用字符串拼接sum = \'hello\' + (a+b) + \'world\' ,利用模板字符串 `hello ${a+b} world`
  4. 带标签处理 :声明一个function tag(){},利用tag`hello 13${expression} world}`就可以执行,可以获取arguments对象,以每个${}为界限[\'0\':\'以${}生成的数组对象\',\'1\':\'第一个${}\',\'2\':\'第二个${}\']
  5. 通过调用String.raw()来获取原始的字符串,String.raw`hello \\n ${\'world\'}` 得到 hello \\n world

字符Unicode表示:

  1. \'\\uxxxx\' : xxxx 为码点, 可利用 \\u{xxxx}表示
  2. String.fromCodePoint():从码点反应对应的字符,fromCodePoint方法在String对象上,codePointAt方法是在String的实例对象上
  3. 确定字符串是否在另一个字符串内部,传统上,只有indexOf()方法; ES6又提供了额外的三种方法,include,startWith,endWith,返回值都是Boolean类型
  4. 字符串的repeat方法,参数为重复的次数; s = \'a\' ,s.repeat(2)返回aa

以上是关于ES 6的主要内容,如果未能解决你的问题,请参考以下文章

es 3.0 es 5.0 es 6.0

Runoob-ES6:ES6 环境搭建

尝试在 Rails 4 中使用 sprockets-es6 使用 'import' 和 'export' es6

JavaScript-ES6新特性

Vue 教程(三十一)webpack-ES6 转 ES5 处理

JavaScript ES6功能概述(ECMAScript 6和ES2015 +)