View on GitHub

Note: A commonly accepted practice is to use const except in cases of loops and reassignment. However, in this resource I'll be using let in place of var for all ES6 examples.

  • Variable: x
  • Object: obj
  • Array: arr
  • Function: func
  • Parameter, method: a, b, c
  • String: str

Table of contents

  • Variable declaration
  • Constant declaration
  • Arrow function syntax
  • Template literals
  • Implicit returns
  • Key/property shorthand
  • Method definition shorthand
  • Destructuring (object matching)
  • Array iteration (looping)
  • Default parameters
  • Spread syntax
  • Classes/constructor functions
  • Inheritance
  • Modules - export/import
  • Promises/callbacks

Variables and constant feature comparison

Understanding Variables, Scope, and Hoisting in JavaScript

Keyword Scope Hoisting Can Be Reassigned Can Be Redeclared
var Function scope Yes Yes Yes
let Block scope No Yes No
const Block scope No No No

Variable declaration

ES6 introduced the let keyword, which allows for block-scoped variables which cannot be hoisted or redeclared.

MDN Reference: let

Constant declaration

ES6 introduced the const keyword, which cannot be redeclared or reassigned, but is not immutable.

MDN Reference: const

Arrow functions

The arrow function expression syntax is a shorter way of creating a function expression. Arrow functions do not have their own this, do not have prototypes, cannot be used for constructors, and should not be used as object methods.

# ES5

function func(a, b, c) {} // function declaration
var func = function(a, b, c) {} // function expression #ES6 let func = a => {} // parentheses optional with one parameter
let func = (a, b, c) => {} // parentheses required with multiple parameters

  MDN Reference: Arrow functions

Template literals(模板文字)

Concatenation/string interpolation

Expressions can be embedded in template literal strings.

# ES5

var str = 'Release date: ' + date

# ES6

let str = `Release Date: ${date}`

  MDN Reference: Expression interpolation

Multi-line strings

Using template literal syntax, a JavaScript string can span multiple lines without the need for concatenation.

#ES5

var str = 'This text ' + 'is on ' + 'multiple lines'

# ES6

let str = `This text
is on
multiple lines`

  

Note: Whitespace is preserved in multi-line template literals. See Removing leading whitespace in ES6 template strings.

Implicit returns

The return keyword is implied and can be omitted if using arrow functions without a block body.

# ES5

function func(a, b, c) {
return a + b + c
} # ES6 let func = (a, b, c) => a + b + c // curly brackets must be omitted

 MDN Reference: Function body

Key/property shorthand

ES6 introduces a shorter notation for assigning properties to variables of the same name.

# ES5

var obj = {
a: a,
b: b,
} # ES6 let obj = {
a,
b,
}

  MDN Reference: Property definitions

Method definition shorthand

The function keyword can be omitted when assigning methods on an object.

# ES5

var obj = {
a: function(c, d) {},
b: function(e, f) {},
} # ES6 let obj = {
a(c, d) {},
b(e, f) {},
}
obj.a() // call method a

  MDN Reference: Method definitions

Destructuring (object matching)

Use curly brackets to assign properties of an object to their own variable.

var obj = { a: 1, b: 2, c: 3 }

# ES5

var a = obj.a
var b = obj.b
var c = obj.c # ES6 let { a, b, c } = obj

  MDN Reference: Object initializer

Array iteration (looping)

A more concise syntax has been introduced for iteration through arrays and other iterable objects.

var arr = ['a', 'b', 'c']

# ES5

for (var i = 0; i < arr.length; i++) {
console.log(arr[i])
} # ES6 for (let i of arr) {
console.log(i)
}

  MDN Reference: for...of

Default parameters

Functions can be initialized with default parameters, which will be used only if an argument is not invoked through the function.

# ES5

var func = function(a, b) {
b = b === undefined ? 2 : b
return a + b
} # ES6 let func = (a, b = 2) => {
return a + b
} func(10) // returns 12
func(10, 5) // returns 15

  MDN Reference: Default paramters

Spread syntax

Spread syntax can be used to expand an array.

# ES6

let arr1 = [1, 2, 3]
let arr2 = ['a', 'b', 'c']
let arr3 = [...arr1, ...arr2] console.log(arr3) // [1, 2, 3, "a", "b", "c"]

Spread syntax can be used for function arguments.

# ES6

let arr1 = [1, 2, 3]
let func = (a, b, c) => a + b + c console.log(func(...arr1)) // 6

  MDN Reference: Spread syntax

Classes/constructor functions

ES6 introducess the class syntax on top of the prototype-based constructor function.

# ES5

function Func(a, b) {
this.a = a
this.b = b
} Func.prototype.getSum = function() {
return this.a + this.b
} var x = new Func(3, 4) # ES6 class Func {
constructor(a, b) {
this.a = a
this.b = b
} getSum() {
return this.a + this.b
}
} let x = new Func(3, 4) x.getSum() // returns 7

  MDN Reference: Classes

Inheritance

The extends keyword creates a subclass.

# ES5

function Inheritance(a, b, c) {
Func.call(this, a, b) this.c = c
} Inheritance.prototype = Object.create(Func.prototype)
Inheritance.prototype.getProduct = function() {
return this.a * this.b * this.c
} var y = new Inheritance(3, 4, 5) # ES6 class Inheritance extends Func {
constructor(a, b, c) {
super(a, b) this.c = c
} getProduct() {
return this.a * this.b * this.c
}
} let y = new Inheritance(3, 4, 5) y.getProduct() // 60

  MDN Reference: Subclassing with extends

Modules - export/import

Modules can be created to export and import code between files.

# index.html

<script src="export.js"></script>
<script type="module" src="import.js"></script> # export.js let func = a => a + a
let obj = {}
let x = 0 export { func, obj, x } # import.js import { func, obj, x } from './export.js' console.log(func(3), obj, x)

  

Promises/Callbacks

Promises represent the completion of an asynchronous function. They can be used as an alternative to chaining functions.

# ES5 callback

function doSecond() {
console.log('Do second.')
} function doFirst(callback) {
setTimeout(function() {
console.log('Do first.') callback()
}, 500)
} doFirst(doSecond) # ES6 Promise let doSecond = () => {
console.log('Do second.')
} let doFirst = new Promise((resolve, reject) => {
setTimeout(() => {
console.log('Do first.') resolve()
}, 500)
}) doFirst.then(doSecond)

  

An example below using XMLHttpRequest, for demonstrative purposes only (Fetch API would be the proper modern API to use).

# ES5 callback

function makeRequest(method, url, callback) {
var request = new XMLHttpRequest() request.open(method, url)
request.onload = function() {
callback(null, request.response)
}
request.onerror = function() {
callback(request.response)
}
request.send()
} makeRequest('GET', 'https://url.json', function(err, data) {
if (err) {
throw new Error(err)
} else {
console.log(data)
}
}) # ES6 Promise function makeRequest(method, url) {
return new Promise((resolve, reject) => {
let request = new XMLHttpRequest() request.open(method, url)
request.onload = resolve
request.onerror = reject
request.send()
})
} makeRequest('GET', 'https://url.json')
.then(event => {
console.log(event.target.response)
})
.catch(err => {
throw new Error(err)
})

  

If you found this useful, please share!

 

ES6 Syntax and Feature Overview的更多相关文章

  1. Photon——Feature Overview 功能概述

    Photon——Feature Overview 功能概述   Feature Overview 功能概述        Photon is a real-time socket server and ...

  2. Javescript——变量声明的区别

    原文链接:ES6 Syntax and Feature Overview View on GitHub Keyword Scope Hoisting Can Be Reassigned Can Be ...

  3. Sublime Es6教程1-环境搭建

    因为现在网上的教程都不靠谱,于是决定自己跳坑自己写,分为三块来玩: 一.环境搭建 二.语法讲解 三.项目实战 很多时候,你想搞一个东西,却因为环境没有搭建好,而不能很开森的探索未知的世界,多年的编程经 ...

  4. ES6语法糖集锦

    sublime3安装Es6插件 javascriptNext,然后安装即可 Java​Script​Next - ES6 Syntax()高亮插件 -------------------------- ...

  5. vscode插件-JavaScript(ES6) Code Snippets 缩写代表含义

    Import and export Trigger Content imp→ imports entire module import fs from 'fs'; imn→ imports entir ...

  6. Fundamental ES6 Part-I

    Exercise-01 with Solution Write a JavaScript program to compare two objects to determine if the firs ...

  7. JavaScript资源大全中文版(Awesome最新版)

    Awesome系列的JavaScript资源整理.awesome-javascript是sorrycc发起维护的 JS 资源列表,内容包括:包管理器.加载器.测试框架.运行器.QA.MVC框架和库.模 ...

  8. dfsdf

    This project was bootstrapped with Create React App. Below you will find some information on how to ...

  9. BETTER SUPPORT FOR FUNCTIONAL PROGRAMMING IN ANGULAR 2

    In this blog post I will talk about the changes coming in Angular 2 that will improve its support fo ...

随机推荐

  1. 用js刷剑指offer(连续子数组的最大和)

    题目描述 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学.今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决.但是,如果向量 ...

  2. 牛客练习赛50 D tokitsukaze and Event (最短路,思维)

    牛客练习赛50 D tokitsukaze and Event 链接:https://ac.nowcoder.com/acm/contest/1080/D来源:牛客网 时间限制:C/C++ 1秒,其他 ...

  3. Mybatis3.1-[tp_34-35]-_映射文件_select_resultMap关联查询_collection定义关联集合封装规则_collection分步查询_延迟加载

    笔记要点出错分析与总结工程组织 1.定义接口 interface DepartmentMapper package com.dao; import com.bean.Department; publi ...

  4. python基础--数据类型、运算符、流程控制

    原文地址:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/00143165862 ...

  5. 微服务,开源 RPC 框架 - Spring Cloud

    Spring Cloud:国外 Pivotal 公司 2014 年对外开源的 RPC 框架,仅支持 Java 语言 Spring Cloud 利用 Spring Boot 特性整合了开源行业中优秀的组 ...

  6. Mybatis二级缓存的简单应用

    1.接口 public interface MemberMapperCache { public Members selectMembersById(Integer id); } 2.POJO类 实现 ...

  7. 利用Linux自带的logrotate管理日志

    日常运维中,经常要对各类日志进行管理,清理,监控,尤其是因为应用bug,在1小时内就能写几十个G日志,导致磁盘爆满,系统挂掉. nohup.out,access.log,catalina.out 本文 ...

  8. Django REST framework+Vue 打造生鲜电商项目(笔记十)

    (from:https://www.cnblogs.com/derek1184405959/p/8877643.html  有修改) 十三.首页.商品数量.缓存和限速功能开发 首先把pycharm环境 ...

  9. 原生JS实现购物车全选多选按钮功能

    对于JS初学者来说,一个完整的购物车实现还是挺难的,逻辑功能挺多.写出完整功能,能提升不少JS基础,下面实现购物车全选多选按钮功能: 首先HTML及CSS部分: <style> table ...

  10. sql server 事务和锁的作用

    事务 事务就是作为一个逻辑工作单元的SQL语句,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上个节点.为了确保要么执行,要么不执行,就可以使用事务.而锁是实现事务 ...