------------------------
ECMAScript 6 简介
------------------------
ECMAScript 和 JavaScript 的关系是,前者是后者的规格,后者是前者的一种实现
另外 ECMAScript 方言还有 Jscript 和 ActionScript

ES6 = ES2015

查看node支持的es6特性:
$ node --v8-options | grep harmony

查看自己浏览器对es6的支持:
http://ruanyf.github.io/es-checker/

Babel / Traceur 转码器:
~

------------------------
let / const
------------------------
1. let用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效
{
let a = 10;
var b = 1;
}
a // ReferenceError: a is not defined.
b // 1

2. for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域
for (let i = 0; i < 3; i++) {
let i = 'abc';
console.log(i);
}
// abc
// abc
// abc

3. let所声明的变量一定要在声明后使用, 否则报错
console.log(bar); // 报错ReferenceError
let bar = 2;

4. 暂时性死区: 跟上一种情况相似, 必须先声明后使用
var tmp = 123;
if (true) {
tmp = 'abc'; // ReferenceError
let tmp;
}

5.
var x = x;// 不报错
let x = x;// 报错

6. typeof不再安全: 所以使用变量之前记得要先声明
typeof x; // ReferenceError
let x;

7. 不允许重复声明
function func(arg) {
let arg; // 报错
}

8. 块级作用域不返回值, 怎么办: 加上do,使它变为do表达式
变量x会得到整个块级作用域的返回值(t * t + 1)
let x = do {
let t = f();
t * t + 1;
};

9. 与顶层对象脱钩
var a = 1;
window.a // 1

let b = 1;
window.b // undefined

10. const: 与let类似, 区别是一旦声明,常量的值就不能改变

------------------------
变量的解构赋值
------------------------
1. 解构: 按照一定模式,从数组和对象中提取值,对变量进行赋值
let [a, b, c] = [1, 2, 3];//完全解构成功
let [bar, foo] = [1];//部分解构不成功, foo的值是: undefined
let [a, [b], d] = [1, [2, 3], 4];//不完全解构, a 1, b 2, d 4

2. 如果等号的右边不是可遍历的结构,那将会报错
let [foo] = null; // 报错
let [foo] = {}; // 报错

3. set结构, 也可以赋值
let [x, y, z] = new Set(['a', 'b', 'c']);

4. 默认值
let [foo = true] = [];
foo // true

let [x, y = 'b'] = ['a']; // x='a', y='b'
let [x, y = 'b'] = ['a', undefined]; // x='a', y='b'

let [x = 1] = [null]; //x的值是null, 只能用undefined

let [x = 1, y = x] = [2]; // x=2, y=2
let [x = y, y = 1] = []; // ReferenceError

5. 对象的解构赋值
5.1 变量必须与属性同名,才能取到正确的值
let { bar, foo } = { foo: "aaa", bar: "bbb" };
let { baz } = { foo: "aaa", bar: "bbb" }; //baz的值是undefined

5.2 如果变量名与属性名不一致: foo是匹配的模式,baz才是变量
let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
baz // "aaa"

5.3 还支持对象赋值, 嵌套赋值: ~

6. 字符串的解构赋值
const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"

let {length : len} = 'hello';
len // 5

7. 数值和布尔值的解构赋值
let {toString: s} = 123;
s === Number.prototype.toString // true

let {toString: s} = true;
s === Boolean.prototype.toString // true

解构赋值的规则是,只要等号右边的值不是对象或数组,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错。
let { prop: x } = undefined; // TypeError
let { prop: y } = null; // TypeError

8. 函数参数的解构赋值
function move({x = 0, y = 0} = {}) {
return [x, y];
}
move({x: 3, y: 8}); // [3, 8]
move({x: 3}); // [3, 0]

------------------------
字符串的扩展
------------------------
1. unicode表示法: 只要将码点放入大括号,就能正确解读该字符
"\u{20BB7}" //7

2. codePointAt: 返回的是码点的十进制值
如果想要十六进制的值,可以使用toString方法转换一下。
let s = '

ES6基础教程(整理自阮一峰)的更多相关文章

  1. ES6自我总结笔记(阮一峰ES6入门)

    [let和const命令] 1.var的作用域是函数体内,不是块级作用域 2.let是更完美的var,let的变量的作用是块级作用域 3.let声明的全局变量不是全局对象属性,不可以通过window. ...

  2. ES6基础教程一 学习笔记

    一.变量的声明 1.var 声明全局变量 在ES6中var用来声明全局变量. 2.let 声明局部变量 3.const 声明常量 二.变量的解构赋值 //1.数组赋值 let [a,b,c]=[1,2 ...

  3. 《ES6基础教程》之 map、forEach、filter indexOf 用法

    1,map,对数组的每个元素进行一定操作,返回一个新的数组. var oldArr = [{first_name:"Colin",last_name:"Toh" ...

  4. 《ES6基础教程》之 Call 方法和 Apply 方法

    <script type="text/javascript"> // Call方法: // 语法:call(thisObj[,arg1,arg2,...,argN]) ...

  5. DDOS 攻击的防范教程--转载自阮一峰的博客

    一个多月前,我的个人网站遭受 DDOS 攻击,下线了50多个小时.这篇文章就来谈谈,如何应对这种攻击. 需要说明的是,我对 DDOS 并不精通,从没想过自己会成为攻击目标.攻击发生以后,很多素昧平生的 ...

  6. Make 命令教程 -- 阮一峰

    摘自http://www.ruanyifeng.com/blog/2015/02/make.html Make 命令教程 作者: 阮一峰 日期: 2015年2月20日 代码变成可执行文件,叫做编译(c ...

  7. 转载自-阮一峰-测试框架 Mocha 实例教程

    测试框架 Mocha 实例教程   作者: 阮一峰 日期: 2015年12月 3日 Mocha(发音"摩卡")诞生于2011年,是现在最流行的JavaScript测试框架之一,在浏 ...

  8. react 入门教程 阮一峰老师真的是榜样

    -  转自阮一峰老师博客 React 入门实例教程   作者: 阮一峰 日期: 2015年3月31日 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Nati ...

  9. 阮一峰:jQuery官方基础教程笔记

    jQuery是目前使用最广泛的javascript函数库. 据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库.微软公司甚至把jQuery作为他们的官方库. 对于网页开发者来 ...

随机推荐

  1. Collapsing Margin:外边距叠加

    参考:http://www.smallni.com/collapsing-margin/ http://www.cnblogs.com/v10258/p/3530290.html

  2. iftop、ifstat详解

    ifstat 介绍 ifstat工具是个网络接口监测工具,比较简单看网络流量 实例 默认使用 #ifstat eth0 eth1 KB/s in KB/s out KB/s in KB/s out 0 ...

  3. bat、cmd、dos窗口:后台调用,不显示黑色的控制台dos(命令行)窗口

    建立一个windows的vbs脚本文件,内容类似如下:注意末尾的参数0 createobject("wscript.shell").run "VBoxheadless.e ...

  4. mysql中,now()函数和sysdate()函数有什么区别?

    问题描述: 今天在看mysql的时间函数,now()和sysdate(),记录下两者之间有什么不同. 实验过程: 1.执行以下的两个语句: mysql),now(); +--------------- ...

  5. Windows中目录及文件路径太长无法删除的解决方法

    用windows自带的命令解决  win7以上的系统有 robocopy 命令 http://www.jianshu.com/p/95a269951a1b 导致目录太深的原因就是用node中的node ...

  6. angular学习(十五)——Provider

    转载请写明来源地址:http://blog.csdn.net/lastsweetop/article/details/60966263 Provider简单介绍 每一个web应用都是由多个对象协作完毕 ...

  7. mybatis由浅入深day02_课程复习_1订单商品数据模型分析

    mybatis第二天  高级映射 查询缓存 和spring整合 课程复习: mybatis是什么? mybatis是一个持久层框架,mybatis是一个不完全的ORM框架.sql语句需要程序员自己去编 ...

  8. Java 基本语法----数组

    数组 数组概述 数组是多个相同类型数据的组合,实现对这些数据的统一管理. 数组属引用类型,数组型数据是对象(Object),数组中的每个元素相当于该对象的成员变量. 数组中的元素可以是任何数据类型,包 ...

  9. swift--添加新手引导页

    swift和oc逻辑上都是一样的,只是写法不一样,可以使用一个view,也可以使用一个viewController,两种都可以的,使用view注意初始化的时候给他一个frame,vc的话,直接在本控制 ...

  10. php上传文件中文文件名乱码的解决方法

    文件上传是我们在处理表单提交时候最常用的功能之一,今天写了一个小小的demo,如下: 先看结构: html为表单提交的页面,php为处理表单的文件,upload为上传文件所放的位置 html: < ...