------------------------
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. xml的序列化与反序列化求一个好用的东西,类似,newtonsoft.net转json的东西。xml里面的结构和数据库不一致..................

    xml的序列化与反序列化求一个好用的东西,类似,newtonsoft.net转json的东西.xml里面的结构和数据库不一致..................

  2. unity3d中的DontDestroyOnLoad来回切换出现多个实例问题

    在用Unity3D开发游戏中,我们会经常创建多个场景,但是在场景过度的时候,通常场景中的对象会被删除.所以Unity3D给了我们一个不删除前一个 场景中的某一个对象或者脚本的API,那就是“DontD ...

  3. jquery轻量级富文本编辑器Trumbowyg

    html: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta http-equiv=&qu ...

  4. TMS320F28335项目开发记录3_28335简介

    28335特性介绍 高性能静态CMOS技术         高达150MHZ(6.67ns的周期时间):1.9V / 1.8内核 ,3.3V I/O设计 高性能32位CPU         IEEE- ...

  5. FairyGUI学习

    官网:http://www.fairygui.com/ 教程:http://www.taikr.com/course/446/tasks 博客:http://gad.qq.com/article/de ...

  6. UGUI之Canvas Group

    可以通过Canvas Group影响该组UI元素的部分性质,而不需要费力的对该组UI下的每个元素逐个调整.Canvas Group是同时作用于该组UI下的全部元素. 参数:Alpha:该组UI元素的透 ...

  7. ios 判断GPS是否是在中国境内

    博文转载至 http://blog.csdn.net/cuibo1123/article/details/45691631 ZCChinaLocation 基本思路是:把整个行政区域划分为几个小的矩形 ...

  8. MongoDB 用户角色

    Read:允许用户读取指定数据库 readWrite:允许用户读写指定数据库 dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建.删除,查看统计或访问system.profile user ...

  9. Unity鼠标点击Collider

    void OnGUI() { if (Event.current != null && Event.current.type == EventType.mouseDown) { )) ...

  10. APP的缓存文件放在哪里?

    只要是需要进行联网获取数据的APP,都会在本地产生缓存文件.那么,这些缓存文件到底放在什地方合适呢?系统有没有给我们提供建议的缓存位置呢?不同的缓存位置有什么不同呢? 考虑到卸载APP必须删除缓存 在 ...