arrow functions (箭头函数)

函数的快捷写法。不需要 function 关键字来创建函数,省略 return 关键字,继承当前上下文的 this 关键字

// ES5

var arr1 = [1, 2, 3];

var newArr1 = arr1.map(function(x) {

  return x + 1;

});

// ES6

let arr2 = [1, 2, 3];

let newArr2 = arr2.map((x) => {

  x + 1

});

注意:当你的函数有且仅有一个参数的时候,是可以省略掉括号的;当函数中有且仅有一个表达式的时候可以省略{}

let arr2 = [1, 2, 3];

let newArr2 = arr2.map(x => x + 1);

JavaScript语言的this对象一直是一比较麻烦的问题,运行上面的代码会报错,这是因为setTimeout中的this指向的是全局对象。

class Animal {

    constructor() {

        this.type = 'animal';

    }

    says(say) {

        setTimeout(function() {

            console.log(this.type + ' says ' + say);

        }, 1000);

    }

} 

var animal = new Animal();

animal.says('hi'); //undefined says hi

解决办法:

// 方法1: 将this传给self,再用self来指代this

says(say) {

    var self = this;

    setTimeout(function() {

        console.log(self.type + ' says ' + say);

    }, 1000);

}

// 方法2: 用bind(this),即

says(say) {

    setTimeout(function() {

        console.log(this.type + ' says ' + say);

    }.bind(this), 1000);

}

// ES6: 箭头函数

// 当使用箭头函数时,函数体内的this对象,就是定义时所在的对象

says(say) {

    setTimeout(() => {

        console.log(this.type + ' says ' + say);

    }, 1000);

}

template string (模板字符串)

解决了 ES5 在字符串功能上的难点。

第一个用途:字符串拼接。将表达式嵌入字符串中进行拼接,用 ` 和${}`来界定。

// es5

var name1 = "bai";

console.log('hello' + name1);

// es6

const name2 = "ming";

console.log(`hello${name2}`);

用途二:在ES5时我们通过反斜杠来做多行字符串拼接。ES6反引号 “ 直接搞定。

// es5

var msg = "Hi \

man!";

// es6

const template = `<div>

    <span>hello world</span>

</div>`;

destructuring (解构)

简化数组和对象中信息的提取。

ES6前,我们一个一个获取对象信息;ES6后,解构能让我们从对象或者数组里取出数据存为变量

// ES5

var people1 = {

  name: 'bai',

  age: 20,

  color: ['red', 'blue']

};

var myName = people1.name;

var myAge = people1.age;

var myColor = people1.color[0];

console.log(myName + '----' + myAge + '----' + myColor); 

// ES6

let people2 = {

  name: 'ming',

  age: 20,

  color: ['red', 'blue']

}

let { name, age } = people2;

let [first, second] = people2.color;

console.log(`${name}----${age}----${first}`);

default 函数默认参数


// ES5 给函数定义参数默认值

function foo(num) {

  num = num || 200;

  return num;

}

// ES6

function foo(num = 200) {

  return num;

}

rest arguments (rest参数)

解决了 es5 复杂的 arguments 问题

function foo(x, y, ...rest) {

    return ((x + y) * rest.length);

}

foo(1, 2, 'hello', true, 7); // 9

Spread Operator (展开运算符)

用途一:组装数组

let color = ['red', 'yellow'];

let colorful = [...color, 'green', 'blue'];

console.log(colorful); // ["red", "yellow", "green", "blue"]

用途二:获取数组除了某几项的其他项

let num = [1, 3, 5, 7, 9];

let [first, second, ...rest] = num;

console.log(rest); // [5, 7, 9]

对象

对象初始化简写

// ES5

function people(name, age) {

  return {

    name: name,

    age: age

  };

}

// ES6

function people(name, age) {

  return {

    name,

    age

  };

}

对象字面量简写(省略冒号与 function 关键字)

// ES5

var people1 = {

  name: 'bai',

  getName: function () {

    console.log(this.name);

  }

};

// ES6

let people2 = {

  name: 'bai',

  getName () {

    console.log(this.name);

  }

};

Promise

用同步的方式去写异步代码

// 发起异步请求

fetch('/api/todos')

  .then(res => res.json())

  .then(data => ({

    data

  }))

  .catch(err => ({

    err

  }));

Generators

生成器( generator)是能返回一个迭代器的函数。

生成器函数也是一种函数,最直观的表现就是比普通的function多了个星号*,在其函数体内可以使用yield关键字,有意思的是函数会在每个yield后暂停。这里生活中有一个比较形象的例子。咱们到银行办理业务时候都得向大厅的机器取一张排队号。你拿到你的排队号,机器并不会自动为你再出下一张票。也就是说取票机“暂停”住了,直到下一个人再次唤起才会继续吐票。

迭代器:当你调用一个generator时,它将返回一个迭代器对象。这个迭代器对象拥有一个叫做next的方法来帮助你重启generator函数并得到下一个值。next方法不仅返回值,它返回的对象具有两个属性:done和value。value是你获得的值,done用来表明你的generator是否已经停止提供值。继续用刚刚取票的例子,每张排队号就是这里的value,打印票的纸是否用完就这是这里的done。

// 生成器

function *createIterator() {

  yield 1;

  yield 2;

  yield 3;

}

// 生成器能像正规函数那样被调用,但会返回一个迭代器

let iterator = createIterator();

console.log(iterator.next().value); // 1

console.log(iterator.next().value); // 2

console.log(iterator.next().value); // 3

ES6常用语法(二)的更多相关文章

  1. ES5与ES6常用语法教程之 ②解构语法糖、声明变量异同

    js常用语法系列教程如下 es5与es6常用语法教程(1) es5与es6常用语法教程(2) es5与es6常用语法教程(3) es5与es6常用语法教程(4) es5与es6常用语法教程(5) es ...

  2. vue学习(一)ES6常用语法

    1 ES6常用语法 1.1 变量提升 例① # 变量提升 <div id="app"> </div> <script> console.log( ...

  3. ES6常用语法

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015. 也就是说,ES6就是ES2015. ...

  4. ES6常用语法简介import export

    ES6常用语法简介import export let与var用法区别 //var var a = []; for (var i = 0; i < 10; i++) { a[i] = functi ...

  5. ES6 常用语法知识汇总

    ES6模块化如何使用,开发环境如何打包? 1.模块化的基本语法 /* export 语法 */ // 默认导出 export default { a: '我是默认导出的', } // 单独导出 exp ...

  6. ES6常用语法总结

    ECMAScript 6(以下简称ES6)是JavaScript语言的下一代标准.因为当前版本的ES6是在2015年发布的,所以又称ECMAScript 2015.也就是说,ES6就是ES2015.虽 ...

  7. ES5与ES6常用语法教程之 ③模板字符串、判断字符串是否包含其它字符串

    这部分教程我们主要讲解以下几个常用语法 模板字符串 带标签的模板字符串 判断字符串中是否包含其他字符串 给函数设置默认值 模板字符串 老式的拼接字符串方法 let dessert = '

  8. ES6常用语法,面试应急专用!

    常用的ES6语法 注:该文章为转载,原地址为https://www.jianshu.com/p/fb019d7e8b15   什么是ES6? ECMAScript 6(以下简称ES6)是JavaScr ...

  9. ES6常用语法整合

    ES6也出来有一会时间了,他新增的语法糖也的确大大提高了开发者的效率,今天就总结一些自己用到最多的. 说到ES6肯定是先介绍Babel了,据阮一峰老师介绍到,Babel是一个广泛使用的转码器,可以将E ...

随机推荐

  1. 大数据面试题(一)----HADOOP 面试题

    1. 下列哪项通常是集群的最主要瓶颈(C) A. CPU B. 网络 C. 磁盘IO D. 内存 2. 下列哪项可以作为集群的管理工具?(C) A.Puppet B.Pdsh C.ClouderaMa ...

  2. Maven 项目无法在Ecplise加进tomcat server

    当把用Maven项目 加进 tomcat server 时,出现 "There are no resources that can be added or removed from the ...

  3. 前端 JS/TS 调用 ASP.NET Core gRPC-Web

    前言 在上两篇文章中,介绍了ASP.NET Core 中的 gRPC-Web 实现 和 在 Blazor WebAssembly 中使用 gRPC-Web,实现了 Blazor WebAssembly ...

  4. 如何准备Java面试?如何把面试官的提问引导到自己准备好的范围内?

    Java能力和面试能力,这是两个方面的技能,可以这样说,如果不准备,一些大神或许也能通过面试,但能力和工资有可能被低估.再仔细分析下原因,面试中问的问题,虽然在职位介绍里已经给出了范围,但针对每个点, ...

  5. Eureka注册中心高可用集群配置

    Eureka高可用集群配置 当注册中心扛不住高并发的时候,这时候 要用集群来扛: 我们再新建两个module  microservice-eureka-server-2002  microservic ...

  6. 基于 H5与WebGL 的科幻风机 3D 展示

    前言 许多世纪以来,风力机同水力机械一样,作为动力源替代人力.畜力,对生产力的发展发挥过重要作用.近代机电动力的广泛应用以及二十世纪50年代中东油田的发现,使风机发电机的发展缓慢下来. 70年代初期, ...

  7. [Python]获取win平台文件的详细信息

    import win32api def getFileProperties(fname): """ 读取给定文件的所有属性, 返回一个字典. ""&q ...

  8. Why Oracle VIP can not be switched to original node ?

    Oracle RAC is an share everything database architecture. The article is how to check out why virtual ...

  9. Apache开启GZIP 压缩网页

    首先我们先了解Apache Gzip的相关资料. 一.gzip介绍 Gzip是一种流行的文件压缩算法,现在的应用十分广泛,尤其是在Linux平台.当应用Gzip压缩到一个纯文本文件时,效果是非常明显的 ...

  10. 我的一个React路由嵌套(多级路由),路由传参之旅

    在上一篇react路由之旅中,我们简单地配置了react,进行了react路由及相关知识的学习,引入以及实现一个局部跳转的功能,接下来就是深入学习路由的嵌套以及传参,这是工作中主要用要的. 我的rea ...