变量声明

const 和 let

不要用 var,而是用 const 和 let,分别表示常量和变量。不同于 var 的函数作用域,const 和 let 都是块级作用域。

const DELAY = 1000;

let count = 0;
count = count + 1;

  

模板字符串

模板字符串提供了另一种做字符串组合的方法。

const user = 'world';
console.log(`hello ${user}`); // hello world // 多行
const content = `
Hello ${firstName},
Thanks for ordering ${qty} tickets to ${event}.
`;

  

默认参数

function logActivity(activity = 'skiing') {
console.log(activity);
} logActivity(); // skiing

  

箭头函数

函数的快捷写法,不需要通过 function 关键字创建函数,并且还可以省略 return 关键字。

同时,箭头函数还会继承当前上下文的 this 关键字。

比如:

[1, 2, 3].map(x => x + 1); // [2, 3, 4] 等同于: [1, 2, 3].map((function(x) { return x + 1; }).bind(this));

  

模块的 Import 和 Export

import 用于引入模块,export 用于导出模块。

比如:

// 引入全部
import dva from 'dva'; // 引入部分
import { connect } from 'dva';
import { Link, Route } from 'dva/router'; // 引入全部并作为 github 对象
import * as github from './services/github'; // 导出默认
export default App;
// 部分导出,需 import { App } from './file'; 引入
export class App extend Component {};

 

析构赋值

析构赋值让我们从 Object 或 Array 里取部分数据存为变量。

// 对象
const user = { name: 'guanguan', age: 2 };
const { name, age } = user;
console.log(`${name} : ${age}`); // guanguan : 2 // 数组
const arr = [1, 2];
const [foo, bar] = arr;
console.log(foo); // 1

  

我们也可以析构传入的函数参数。

const add = (state, { payload }) => {
return state.concat(payload);
};
析构时还可以配 alias,让代码更具有语义。 const add = (state, { payload: todo }) => {
return state.concat(todo);
};

  

对象字面量改进

这是析构的反向操作,用于重新组织一个 Object 。

const name = 'duoduo';
const age = 8; const user = { name, age }; // { name: 'duoduo', age: 8 }

  

定义对象方法时,还可以省去 function 关键字。

app.model({
reducers: {
add() {} // 等同于 add: function() {}
},
effects: {
*addRemote() {} // 等同于 addRemote: function*() {}
},
});

  

Spread Operator

Spread Operator 即 3 个点 ...,有几种不同的使用方法。

可用于组装数组。

const todos = ['Learn dva'];
[...todos, 'Learn antd']; // ['Learn dva', 'Learn antd']
也可用于获取数组的部分项。 const arr = ['a', 'b', 'c'];
const [first, ...rest] = arr;
rest; // ['b', 'c'] // With ignore
const [first, , ...rest] = arr;
rest; // ['c']

  

还可收集函数参数为数组。

function directions(first, ...rest) {
console.log(rest);
}
directions('a', 'b', 'c'); // ['b', 'c'];
代替 apply。 function foo(x, y, z) {}
const args = [1,2,3]; // 下面两句效果相同
foo.apply(null, args);
foo(...args);

  

对于 Object 而言,用于组合成新的 Object 。(ES2017 stage-2 proposal)

const foo = {
a: 1,
b: 2,
};
const bar = {
b: 3,
c: 2,
};
const d = 4; const ret = { ...foo, ...bar, d }; // { a:1, b:3, c:2, d:4 }

  

此外,在 JSX 中 Spread Operator 还可用于扩展 props,详见 Spread Attributes。

Promises

Promise 用于更优雅地处理异步请求。比如发起异步请求:

fetch('/api/todos')
.then(res => res.json())
.then(data => ({ data }))
.catch(err => ({ err }));

  

定义 Promise 。

const delay = (timeout) => {
return new Promise(resolve => {
setTimeout(resolve, timeout);
});
}; delay(1000).then(_ => {
console.log('executed');
});

  

ES6,先知道这些必会的才行的更多相关文章

  1. 要做linux运维工程师的朋友,必须要掌握以下几个工具才行 ...

    要做linux运维工程师的朋友,必须要掌握以下几个工具才行 ...  [复制链接]   发表于 2013-12-13 15:59 | 来自  51CTO网页 [只看他] 楼主           本人 ...

  2. 【转】 要做linux运维工程师的朋友,必须要掌握以下几个工具才行

          本人是linux运维工程师,对这方面有点心得,现在我说说要掌握哪方面的工具吧 说到工具,在行外可以说是技能,在行内我们一般称为工具,就是运维必须要掌握的工具. 我就大概列出这几方面,这样入 ...

  3. 适配i5,要加入i5的启动页才行,否则运行的效果还是i4

    适配i5,要加入i5的启动页才行,否则运行的效果还是i4

  4. git rebase之前需要commit才行

    更新好本地代码后,git fetch, 接着合并,但是git rebase 不行, git status一看,有很多更新的文件. 于是 git add --后,再rebase,还是不行. 注意,reb ...

  5. chrome谷歌浏览器用这种方式清除缓存比较方便了,必须是调试模式才行

     chrome谷歌浏览器用这种方式清除缓存比较方便了  PS:必须是调试模式才行,可以不是手机模式 ,有些低版本浏览器可能没有这个功能.   ----------------------------- ...

  6. 能把opencv的源码也进行调试吗?(需要pdb文件才行)

    能把opencv的源码也进行调试吗?(需要pdb文件才行)1.我是用的Qt Creator,然后"工具\选项\调试器\概要\源码路径映射"中,选择"添加Qt源码" ...

  7. filter过滤器 默认情况下只对客户端发来的请求有过滤作用 对服务端的跳转不起作用 需要显示的在xml定义过滤的方式才行

    filter过滤器 默认情况下只对客户端发来的请求有过滤作用 对服务端的跳转不起作用 需要显示的在xml定义过滤的方式才行

  8. jdk和Tomcat版本之间的关系,jdk尽量要比tomcat低才行

    注:本文来源于:6860 <jdk和Tomcat版本之间的关系,jdk尽量要比tomcat低才行> 用的tomcat是低版本的,但是用的jdk却是高版本的,用Servlet做的项目运行都没 ...

  9. 小米miui5系统的webview在处理动画事件transitionEnd事件时,竟然要用transitionend才行

    一般的安卓系统用的是webkitTransitionEnd, 而小米的系统我用了webkitTransitionEnd事件无法执行,只能用transitionend才会被执行,怪

随机推荐

  1. 磁盘磁盘MBR与GPT的区别

    基本磁盘与动态磁盘    磁盘的使用方式可以分为两类:一类是“基本磁盘”.基本磁盘非常常见,我们平时使用的磁盘类型基本上都是“基本磁盘”.“基本磁盘”受26个英文字母的限制,也就是说磁盘的盘符只能是2 ...

  2. BUAA_OO_homworkone包含三角函数的多项式求导

    第一次作业 基于x的简单多项式相加求导 带符号整数 支持前导0的带符号整数,符号可省略,如: +02.-16>.19260817等. 幂函数 一般形式 由自变量x和指数组成,指数为一个带符号整数 ...

  3. jQuery 与 js的入口函数写法

    //js的入口函数执行要比jQuery的入口函数执行得晚一些. //jq的入口函数会等待页面的加载完成才执行,但是不会等待图片的加载. //js的入口函数会等待页面加载完成,并且等待图片加载完成才开始 ...

  4. ZOJ - 3939 The Lucky Week(日期循环节+思维)

    Edward, the headmaster of the Marjar University, is very busy every day and always forgets the date. ...

  5. 6. Javscript学习笔记——BOM

    6. BOM 6.1 widow对象 全局作用域: window是浏览器的一个实例 window对象同时扮演着ECMAScript中的Global对象的角色,因此所有在全局作用域中声明的变量.函数都会 ...

  6. Paxos算法的通俗理解(转)

    维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性 ...

  7. Spring Roo 想知道源码,怎么实现自动生成枯燥的有规律的文件

    简介   似乎是社区在维护的,不在 Spring 官网的 main projects 列表里,而是在 社区projects 列表里   是工具,不是像Spring Boot 一样的框架 http:// ...

  8. Java中的值传递和地址传递(传值、传引用)

    首先,不要纠结于 Pass By Value 和 Pass By Reference 的字面上的意义,否则很容易陷入所谓的“一切传引用其实本质上是传值”这种并不能解决问题无意义论战中.更何况,要想知道 ...

  9. (转)python标准库中socket模块详解

    python标准库中socket模块详解 socket模块简介 原文:http://www.lybbn.cn/data/datas.php?yw=71 网络上的两个程序通过一个双向的通信连接实现数据的 ...

  10. Android ListView中EditView再次焦点获取

    问题:在ListView中使用EditView,当第一次将焦点给到EditView的时候弹出小键盘.使得EditView失去焦点. 分析:因为在第一次使用EditView弹出小键盘之后,会重新的调用一 ...