块级作用域
Let
function fn () {
let x = 0
if (true) {
let x = 1 // only inside this `if`
}
}
Const
const a = 1
let
新的 var
,有块级作用域。 const
的工作类似于 let
, 但是声明后值不能改变。查看: Let and const
反引号字符串
插值
var message = `Hello ${name}`
多行字符串
var str = `
hello
world
`
模板字符串和多行字符串。 查看: 模板字符串
二进制和八进制字面量
let bin = 0b1010010
let oct = 0o755
查看: 二进制和八进制字面量
新方法
新的字符串方法
"hello".repeat(3)
"hello".includes("ll")
"\u1E9B\u0323".normalize("NFC")
See: 新方法
Classes (类)
class Circle extends Shape {
Constructor(构造函数)
constructor (radius) {
this.radius = radius
}
Methods(方法)
getArea () {
return Math.PI * 2 * this.radius
}
Calling superclass methods(调用超类方法)
expand (n) {
return super.expand(n) * Math.PI
}
Static methods(静态方法)
static createFromDiameter(diameter) {
return new Circle(diameter / 2)
}
}
原型的语法糖。查看 Classes
指数运算符
const byte = 2 ** 8
// 等同于: Math.pow(2, 8)
Promises
创建 promises
new Promise((resolve, reject) => {
if (ok) { resolve(result) }
else { reject(error) }
})
对于异步编程。 查看:Promises
使用 promises
promise
.then((result) => { ··· })
.catch((error) => { ··· })
Promise 函数
Promise.all(···)
Promise.race(···)
Promise.reject(···)
Promise.resolve(···)
Async-await
async function run () {
const user = await getUsers()
const tweets = await getTweets(user)
return [user, tweets]
}
async
函数是使用函数的另一种方式。
查看: async 函数
解构
解构赋值
Arrays(数组)
var [first, last] = ['Nikola', 'Tesla']
Objects(对象)
let {title, author} = {
title: 'The Silkworm',
author: 'R. Galbraith'
}
支持匹配数组和对象。 查看: Destructuring(解构)
默认值
var scores = [22, 33]
var [math = 50, sci = 50, arts = 50] = scores
// 结果:
// math === 22, sci === 23, arts === 50
在解构数组或对象时可以分配默认值。
函数参数
function greet({ name, greeting }) {
console.log(`${greeting}, ${name}!`)
}
greet({ name: 'Larry', greeting: 'Ahoy' })
对象和数组的解构也可以在函数参数中完成。
重新分配键
function printCoordinates({ left: x, top: y }) {
console.log(`x: ${x}, y: ${y}`)
}
printCoordinates({ left: 25, top: 90 })
这个例子将 x
的值分配给 left
键。
循环
for (let {title, artist} in songs) {
···
}
赋值表达式也能运行在循环中。
展开操作符
对象展开
使用对象展开
const options = {
...defaults,
visible: true
}
不使用对象展开
const options = Object.assign(
{}, defaults,
{ visible: true })
对象展开操作符允许你从其他对象构建新的对象。
查看: Object spread
数组展开
使用数组展开
const users = [
...admins,
...editors,
'rstacruz'
]
不使用数组展开
const users = admins
.concat(editors)
.concat([ '@rstacruz' ])
展开操作符让你可以以相同的方式构建新数组。
查看: Spread operator
函数
函数参数
默认参数
function greet (name = "Jerry") {
return `Hello ${name}`
}
剩余参数
function fn(x, ...y) {
// y is an Array
return x * y.length
}
展开
fn(...[1, 2, 3])
// 等价于 fn(1, 2, 3)
默认、剩余、展开参数。 查看:函数参数
箭头函数
箭头函数
setTimeout(() => {
···
})
传参
readFile('text.txt', (err, data) => {
...
})
隐形返回
numbers.map(n => n * 2)
// 没有大括号 = 隐式返回
// 等同于: numbers.map(function (n) { return n * 2 })
类似于普通函数,但是 this
保持对外界上下文的引用。
查看:Fat arrows
对象
简写语法
module.exports = { hello, bye }
// 等同于: module.exports = { hello: hello, bye: bye }
查看: Object literal enhancements
方法
const App = {
start () {
console.log('running')
}
}
// Same as: App = { start: function () {···} }
查看: Object literal enhancements
Getters 和 setters
const App = {
get closed () {
return this.status === 'closed'
},
set closed (value) {
this.status = value ? 'closed' : 'open'
}
}
查看: Object literal enhancements
计算属性名
let event = 'click'
let handlers = {
['on' + event]: true
}
// 等同于: handlers = { 'onclick': true }
查看: Object literal enhancements
Modules(模块)
Imports(导入)
import 'helpers'
// 也称: require('···')
import Express from 'express'
// 也称: Express = require('···').default || require('···')
import { indent } from 'helpers'
// 也称: indent = require('···').indent
import * as Helpers from 'helpers'
// 也称: Helpers = require('···')
import { indentSpaces as indent } from 'helpers'
// 也称: indent = require('···').indentSpaces
import
是一个新的 require()
。
查看: Module imports
Exports(导出)
export default function () { ··· }
// 也称: module.exports.default = ···
export function mymethod () { ··· }
// 也称: module.exports.mymethod = ···
export const pi = 3.14159
// 也称: module.exports.pi = ···
export
是一个新的 module.exports
.
查看:Module exports
Generators(生成器)
Generators(生成器)
function* idMaker () {
var id = 0
while (true) { yield id++ }
}
var gen = idMaker()
gen.next().value // → 0
gen.next().value // → 1
gen.next().value // → 2
完整内容详见: Generators
For..of 迭代
for (let i of iterable) {
···
}
用于遍历 generators 函数和数组。 查看:For..of iteration
推荐阅读最新关于 ECMAScript 的文章
- ECMAScript 2015(ES6)的十大特征
- JavaScript ES6(ES2015)入门-核心特性概述
- ES6 新特性范例大全
- 现在就可以使用的5个 ES6 特性
- 面向对象的 JavaScript – 深入了解 ES6 类
- 使用 ES2017 中的 Async(异步) 函数 和 Await(等待)
- JavaScript ECMAScript 2015 (ES6) 和 ECMAScript 2016 (ES7) 新特性速查表
- ECMAScript 6 Modules(模块)系统及语法详解
- 学习 ES2015 新特性
- JavaScript ES2015 中对象继承的模式
- JavaScript 新书:探索 ES2016 与 ES2017(包含了ES2016 与 ES2017 的最新特性)
0 Comments 这个速查表。 写评论!