ES6基础教程(整理自阮一峰)
------------------------
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基础教程(整理自阮一峰)的更多相关文章
- ES6自我总结笔记(阮一峰ES6入门)
[let和const命令] 1.var的作用域是函数体内,不是块级作用域 2.let是更完美的var,let的变量的作用是块级作用域 3.let声明的全局变量不是全局对象属性,不可以通过window. ...
- ES6基础教程一 学习笔记
一.变量的声明 1.var 声明全局变量 在ES6中var用来声明全局变量. 2.let 声明局部变量 3.const 声明常量 二.变量的解构赋值 //1.数组赋值 let [a,b,c]=[1,2 ...
- 《ES6基础教程》之 map、forEach、filter indexOf 用法
1,map,对数组的每个元素进行一定操作,返回一个新的数组. var oldArr = [{first_name:"Colin",last_name:"Toh" ...
- 《ES6基础教程》之 Call 方法和 Apply 方法
<script type="text/javascript"> // Call方法: // 语法:call(thisObj[,arg1,arg2,...,argN]) ...
- DDOS 攻击的防范教程--转载自阮一峰的博客
一个多月前,我的个人网站遭受 DDOS 攻击,下线了50多个小时.这篇文章就来谈谈,如何应对这种攻击. 需要说明的是,我对 DDOS 并不精通,从没想过自己会成为攻击目标.攻击发生以后,很多素昧平生的 ...
- Make 命令教程 -- 阮一峰
摘自http://www.ruanyifeng.com/blog/2015/02/make.html Make 命令教程 作者: 阮一峰 日期: 2015年2月20日 代码变成可执行文件,叫做编译(c ...
- 转载自-阮一峰-测试框架 Mocha 实例教程
测试框架 Mocha 实例教程 作者: 阮一峰 日期: 2015年12月 3日 Mocha(发音"摩卡")诞生于2011年,是现在最流行的JavaScript测试框架之一,在浏 ...
- react 入门教程 阮一峰老师真的是榜样
- 转自阮一峰老师博客 React 入门实例教程 作者: 阮一峰 日期: 2015年3月31日 现在最热门的前端框架,毫无疑问是 React . 上周,基于 React 的 React Nati ...
- 阮一峰:jQuery官方基础教程笔记
jQuery是目前使用最广泛的javascript函数库. 据统计,全世界排名前100万的网站,有46%使用jQuery,远远超过其他库.微软公司甚至把jQuery作为他们的官方库. 对于网页开发者来 ...
随机推荐
- 转载:IE下div使用margin:0px auto不居中的原因
转自:http://www.blogjava.net/sealyu/archive/2010/01/08/308640.html 一般在将div居中显示时,使用css: divX {margin:0 ...
- JS中document对象详解
转自:http://www.cnblogs.com/andycai/archive/2010/06/29/1767351.html 对象属性 document.title //设置文档标题等价于HTM ...
- opengl wglsharelists
原文地址:http://blog.csdn.net/webscaler/article/details/5873179 OpenGL 中用到多线程和多 render context 渲染的时候会用到 ...
- Windows下基于eclipse的Storm应用开发与调试
原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3971113.html 本文以一个简单的example来讲解如何开发storm应用程序 1.创建maven ...
- SharePoint 沙盒无法启动新的解决方案服务的SPUserCodeV4
开发部署时报错: 错误原因:没有启动该服务: 解决方式:打开管理中心—应用程序管理—服务应用程序--管理服务器上的服务,启动该服务即可.
- sip 认证分析
转自:http://blog.csdn.net/wangqi0079/article/details/11569489 SIP类似Http协议.其认证模式也一样.Http协议(RFC 2616 )规定 ...
- 创建并调用 DLL(1)
//通过 DLL Wizard 建立: library TestDLL; uses SysUtils, Classes, Dialogs; {$R *.res} //建立过程 proced ...
- css常用代码含义
1.font:12px Arial, Helvetica, sans-serif: 使用了缩写,完整的代码应该是:font-size:12px; font-family:Tahoma:说明字体为12像 ...
- HTML5 直播技术
https://segmentfault.com/a/1190000010440054
- GLSL/C++ 实现滤镜效果
入门效果之浮雕 "浮雕"图象效果是指图像的前景前向凸出背景.常见于一些纪念碑的雕刻上.要实现浮雕事实上很easy.我们把图象的一个象素和左上方的象素进行求差运算.并加上一个灰度.这 ...