ECMAScript 6 语法说明

前言

ECMAScript6相对于以前的JS来说是一个重要的版本更新,以下内容只节选了其中比较常用的语法更新

let、const、global

let用来申明变量,只在申请的代码块中生效,且在使用时必须先声明.
const为常量申明,申明后不可改变
global浏览器中,顶层对象是window,但 Node环境下为global(window为undefine).

解构语法

只要是可遍历(Iterator)对象,就可对其解构

let arr = [1,2,3]
let [a, b, c, d=2] = arr  // a= 1, b = 2,c = 3 .d = 2
let dict = { 'age': 123, 'name': 112 }
let { name, age } = dict //name = 112 , age = 123
let str = '1df32sdfs'
let [a, b, c] = str //a = 1 b = d c = f 

函数扩展

默认参数

function (a, b = 3) {
}

rest参数

function add(...values) {
  let sum = 0;
  for (var val of values) {
    sum += val;
  }
  return sum;
}
add(2, 5, 3) // 10

箭头函数
箭头函数中的this为定义时所在的对象,不可使用yield命令

let add = ( x, y ) => {  return x + y  } 
add(2, 3) //5

对象扩展

方法简写

var o = {
  method() {
    return "Hello!";
  }
};
// 等同于
var o = {
  method: function() {
    return "Hello!";
  }
};

导出模块和导入模块

module.exports = { getItem, setItem, clear };
// 等同于
module.exports = {
  getItem: getItem,
  setItem: setItem,
  clear: clear
};

Set & Map

set

可以理解为值唯一的数组

let a = new Set([1,2,3,4,1,'1']) //a 含有 1 2 3 4 '1'

Map
相对于对象,其中的key不止用字符串

let a = ['1']
let map1 =new Map()
map.set(a:'value') 
map.get(a)

size

let map1 =new Map()
let b = map1.size  // 0
map.set('a':'value') 
let c = map1.size  // 1
let isHas = map1.has('a') //true

添加属性

for ( let a in dict)
obj[a] = dict[a]

Proxy

外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写,但是不适用箭头函数时 this会指向代理对象,所以可以将proxy指向对象自身. new Proxy(obj, obj)

obj对象在调用set get has时会打印详情

var obj = new Proxy({}, {
  get: function (target, key, receiver) {
    console.log(`getting ${key}!`);
    return Reflect.get(target, key, receiver);
  },
  set: function (target, key, value, receiver) {
    console.log(`setting ${key}!`);
    return Reflect.set(target, key, value, receiver);
  }
  has: function (target, propKey){
console.log('has$(propKye)')
  return Reflect.has(target,proKey)
}
});

Reflect

提供函数,使得对于对象的属性或方法的的操作都变成函数行为

old
name in obj
delete obj[name]

new
Reflect.has(obj, name)
Reflect.deleteProperty(obj, name)

提供方法

Reflect.get(target, name, receiver) //get属性/方法
Reflect.set(target, name, value, receiver)  //set属性/方法
Reflect.has(obj, name) //判断属性方法
Reflect.construct(target, args) //new方法
Reflect.getPrototypeOf(obj) //get属性
Reflect.setPrototypeOf(obj,value) //set 属性
Reflect.apply(func, thisArg, args) //调用方法

Promise

Promise 是异步编程的一种解决方案,创建一个Promise对象,然后在对应操作完成时return resolve或者reject来回调结果

function getData () {
  return new Promise(resolve, reject) {
      //get date
       if (isSuccess){
      return resolve(data)
    } else {
       return reject(err)
      }
    }
  }
});

getDate().then((data)=>{}).catch((err)=>{})

Iterator

js可遍历的类型主要是数组(Array)和对象(Object),ES6 又添加了Map和Set.
Iterator 的遍历过程是这样的。

  • 创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。
  • 第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。
  • 第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。
  • 不断调用指针对象的next方法,直到它指向数据结构的结束位置。

自定义对象只需要实现next方法,返回值或者终止判定(如:undefine,-1,null)则可具有遍历属性,return throw可以在遍历完成/错误时进行操作(清空资源,输出错误信息)

Generator

Generator 函数是 ES6 提供的一种异步编程解决方案,Generator 函数是一个普通函数,但是有两个特征。一是,function关键字与函数名之间有一个星号;二是,函数体内部使用yield表达式,定义不同的内部状态(yield在英语里的意思就是“产出”)。

function* helloWorldGenerator() {
  yield 'hello';
  let c =  yield 'world';
  return 'ending';
}
var func = helloWorldGeneratot() //在定义时不执行任何代码
let step1 =  func.next() //'hello'
let step2 = func.next('!') // 'world'  c = '!'
let step3 = func.next() //'ending'
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,464评论 6 517
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 95,033评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 169,078评论 0 362
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,979评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,001评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,584评论 1 312
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,085评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,023评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,555评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,626评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,769评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,439评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,115评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,601评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,702评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,191评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,781评论 2 361

推荐阅读更多精彩内容

  • 简介 基本概念 Generator函数是ES6提供的一种异步编程解决方案,语法行为与传统函数完全不同。本章详细介绍...
    呼呼哥阅读 1,076评论 0 4
  • 本文为阮一峰大神的《ECMAScript 6 入门》的个人版提纯! babel babel负责将JS高级语法转义,...
    Devildi已被占用阅读 1,988评论 0 4
  • 在此处先列下本篇文章的主要内容 简介 next方法的参数 for...of循环 Generator.prototy...
    醉生夢死阅读 1,452评论 3 8
  • 异步编程对JavaScript语言太重要。Javascript语言的执行环境是“单线程”的,如果没有异步编程,根本...
    呼呼哥阅读 7,313评论 5 22
  • 一、let 和 constlet:变量声明, const:只读常量声明(声明的时候赋值)。 let 与 var 的...
    dadage456阅读 763评论 0 0