es6新特性(一)
关于es6,阮一峰的《ECMAScript 6入门》 http://es6.ruanyifeng.com/写的非常详尽,可以经常看看,这里是对这本书进行一个缩略,可能有误,欢迎大家纠正。aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAIAAAAmKNuZAAAEGUlEQVRIieXUa0ybVRgH8Lfsg8gYEwpzmGCZFaa4DZl2Y8gkYtyIK2ZeMsZibaLTGJXFyxIkJUxnGA7XZjNiGFnCGATYRDYKK62US+kNKJe2QAuDgqzSFloZSK+U9/37gQ8uTRE++M3k+XBynpNf8pyc8ye8Dvt/WMT/mdOKGzlMgsMktOLGzbfW5dZOa+/WcZiER5Xr7sx0iZ91SvY7O7I4TGKw5tOh2z9ymOvOFKThMZS72w74lMmrIwfJe2mYSqfGU0ndfn/Pc25pouO3tx/ob2yOmze7FSd8qufJiZdhyYKNjbls2NiwZOF+JibTMJqyIk+0NeyxtWRvxNltTtk7XnWKo+clPovgswiH7g0scbHIwUKOVZGxtmlt2U31JizeYcw0BhH/4Zw6gVuRjNmjfBZh7TtmHTjBZxHw8uDJhyuPzyKsqkxrVyqfRUC/l1LGT1c+bWr6ODjnsRgXhMnkZAbmj4sKnoL7LHwlosID8FfAXwZfiYiXhCUu5o+LvtoJ44vQJHpbnxirypgZ6AzC/TXId3bvgyULCzlw5cFXgtXrIIUgxSCFWL0OXwlceVjIgSULE4cwlAR5nL12h+HmaafVEsg57h71j6TCxsYiB558+MtACkGpQWlBqUEK4S+DJx+LHNjYmEqHfi+UDF8zXfdTysywNpCbrU3A1GHMZWOJCy8P/gqQYlBawAhKC1IMfwW8PCxxMZeN6cPQ74MqnhLTNd/HGtTdgdxM1S5MpTfkEpsvKBmQRKnP79DJ2gM50zUGJg7VnyRAUQOXuQAAyM4efHhBkf5+/infg1m3xVCfQ0Aeh9bI7sJorUwayI2Xx5PDL9Se2uL3ujbklmeGanNp6IylWiKk+fQg3MSNVzzqpOYvtk12VW/IGZouNn/2CNpinHVb24r2BBl2tuOC5RbDKkq8+lZIv4DzL5zbPn31TZq1Nhqi7fcEYd1lHxp75IHc8sxI/6VdPkWC9Hz0FTZtdcUblNP8cPIKmyblhUNCX6zeKipIHmitNxuGg3wyk+hb07Wd0CRIztEF7JDR9uquL1mgqDVuxesalVYJ2CGSgnC0RZNN4Y0fRbRf5o71KYM8Y6/D7p23qS+ljZXFQBVv/vXJqtNhpce2FB+hFb9GKz5CK309pOr9UHNNNCR0/+3wwW9CRede1cna74/q1w0oj31ediFtVBC5LHwc8jgoGVDFQ8mAPA6dsWiLgWj7H+Vhtz6Iav2OrZVJTYN9G8dnX/XXzWdiB4ojLJWPLf0SBUnUakvk8s1t5p/DNEWhDWeeUdRcHJZ3TOsGNpXGXofdrO9VVBaKijLufL67/r1H67gRDZ8whbxMcem7WpnU2Kv48/epTaTxQ+Was81NjJsG+4w9cq1Mqu/uMKi7p4Y0AZcVUH8Du4MhaQUd2YIAAAAASUVORK5CYII=" alt="" />
注:代码区域内容十分的重要,折叠起来是为了能够总览特性,详细阅读,可以查看代码区内容
1. let 和 const new
let的特性
- 只在代码块内有效
- 不存在变量提升 如果先使用变量再声明就会报错
ReferenceError
,而不是和var一样,只会报undefined - 暂时性死区 如果代码块内定义了和外部的相同的变量,那么返回上一条这种情况
- 不属于window 在es6里面,全局声明的let、const、class类不属于window对象
- 不允许重复声明
var tmp = 123; function func(arg) {
//如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
tmp = 'abc'; // ReferenceError ,还没有定义就会报错,变量不会提升
let tmp;
console.log(tmp); //现在使用tmp就不会报错 console.log(typeof undeclared_variable); //如果一个变量根本没有被声明,使用typeof反而不会报错。没有let之前,typeof运算符是百分之百安全的 let tmp = 'cctv'; //报错,不允许重复声明
let arg = tmp; //报错,不允许重复声明参数const的特性
- 和let5条特性相同
- 是一个只读常量 声明后立马赋值,不然就会报错
- 存储的是地址 所以最好不要使用对象,因为地址是不可更改的但对象内容可以改
const foo = Object.freeze({}); // 常规模式时,下面一行不起作用;
// 严格模式时,该行会报错
foo.prop = 123;
2.变量的解构赋值 new
数组的解构赋值
var a = 1;
var b = 2;
var c = 3;
//ES6允许写成下面这样,左边是数组,右边也是数组(如果不是数组,那么严格地说,不是可遍历的结构,参见《Iterator》一章),那么将会报错)
var [a, b, c] = [1, 2, 3];
//嵌套数组解构
let [foo, [[bar], baz]] = [1, [[2], 3]]; // foo = 1 bar = 2 baz = 3
//不完全解构,但会成功
let [ , , third] = ["foo", "bar", "baz"]; // third = "baz"
//不完全解构,但会成功
let [x, , y] = [1, 2, 3]; // x = 1 y = 3
//...tail代表数组
let [head, ...tail] = [1, 2, 3, 4]; // head = 1 tail = [2, 3, 4]
//允许变量有默认值,只要变量的赋值不严格等于undefined(null,number,或者boolean等的情况下就不使用默认值)
[x, y = 'b'] = ['a', undefined]; // x='a', y='b'
//默认值取值是比较懒惰的,如果默认值是表达式或者函数,那就先取到赋值,有赋值就不管函数或者表达式啦
function f() {
console.log('aaa');
}
let [x = f()] = [1];
对象的解构赋值
//先找到同名属性,比如左边的foo和右边的foo相对应,那么就把123值赋给obj.prop属性,所以这里真正赋值的是obj.prop而不是foo,见《对象的扩展》一章
let obj = {};
let arr = [];
//这里如果不用圆括号括起来就会报错,括起来以后就是一个表达式
//obj在这里面是子对象,也可以写成 { foo: obj{prop:undfined}, bar: arr[0] }
({ foo: obj.prop, bar: arr[0] } = { bar: true ,foo: 123}); //与数组一样,允许嵌套,和默认值,但是和数组不一样的就是对象可以不指定次序。
字符串的解构赋值
//字符串被转换成了一个类似数组的对象。
const [a, b, c, d, e] = 'hello';
a // "h"
b // "e"
c // "l"
d // "l"
e // "o"
//类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值。
let {length : len} = 'hello';
len //
数值和布尔值的解构赋值
//解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。
let {toString: s} = 123;
s === Number.prototype.toString // true let {toString: s} = true;
s === Boolean.prototype.toString // true
//只要等号右边的值不是对象,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错
函数参数的解构赋值
function move({x, y} = { x: 0, y: 0 }) {
return [x, y];
} move({x: 3, y: 8}); // [3, 8]
move({x: 3}); // [3, undefined]
move({}); // [undefined, undefined]
move(); // [0, 0]
es6新特性(一)的更多相关文章
- ES6新特性概览
本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony( ...
- ES6新特性之模板字符串
ES6新特性概览 http://www.cnblogs.com/Wayou/p/es6_new_features.html 深入浅出ES6(四):模板字符串 http://www.infoq.c ...
- Atitit js版本es5 es6新特性
Atitit js版本es5 es6新特性 Es5( es5 其实就是adobe action script的标准化)1 es6新特性1 Es5( es5 其实就是adobe action scrip ...
- ES6新特性:Proxy代理器
ES6新特性:Proxy: 要使用的话, 直接在浏览器中执行即可, node和babel目前还没有Proxy的polyfill;,要使用的话,直接在浏览器中运行就好了, 浏览器的兼容性为:chrome ...
- ES6新特性(函数默认参数,箭头函数)
ES6新特性之 函数参数的默认值写法 和 箭头函数. 1.函数参数的默认值 ES5中不能直接为函数的参数指定默认值,只能通过以下的变通方式: 从上面的代码可以看出存在一个问题,当传入的参数为0或者 ...
- ES6新特性简介
ES6新特性简介 环境安装 npm install -g babel npm install -g babel-node //提供基于node的REPL环境 //创建 .babelrc 文件 {&qu ...
- 轻松学会ES6新特性之生成器
生成器虽然是ES6最具魔性的新特性,但也是最难懂得的一节,笔者写了大量的实例来具体化这种抽象的概念,能够让人一看就懂,目的是希望别人不要重复或者减少笔者学习生成器的痛苦经历. 在说具体的ES6生成器之 ...
- 必须掌握的ES6新特性
ES6(ECMAScript2015)的出现,让前端开发者收到一份惊喜,它简洁的新语法.强大的新特性,带给我们更便捷和顺畅的编码体验,赞! 以下是ES6排名前十的最佳特性列表(排名不分先后): 1.D ...
- 你不知道的JavaScript--Item24 ES6新特性概览
ES6新特性概览 本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代 ...
- javascript ES6 新特性之 扩展运算符 三个点 ...
对于 ES6 新特性中的 ... 可以简单的理解为下面一句话就可以了: 对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中. 作用类似于 Object.assign() ...
随机推荐
- Can't use Subversion command line client:svn
在Intellij IDEA里checkout东西时出先这个错误提示:Can't use Subversion command line client:svn Subversion command l ...
- PHP数据类型
在PHP中,一共支持8种数据类型:整型,浮点型,布尔型,字符串型,数组,对象,空类型(NULL),资源型 标量类型 int(integet)整数类型 整型数据:在内存中占4个字节,也就是32个bit位 ...
- Entity Framework学习笔记——配置EF
初次使用Entity Framework(以下简称EF),为了避免很快忘记,决定开日志记录学习过程和遇到的问题.因为项目比较小,只会用到EF的一些基本功能,因此先在此处制定一个学习目标:1. 配置EF ...
- ubuntu访问supermicro ikvm
https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-ubuntu-16-04 安装 ...
- lnmp下启动mysql报错 The server quit without updating PID file
启动时候错误代码:Starting MySQL[FAIL.] The server quit without updating PID file (/var/run/mysqld/mysqld.pid ...
- VS有效序列号
VS2005 : KYTYH-TQKW6-VWPBQ-DKC8F-HWC4J VS2008 : PYHYP-WXB3B-B2CCM-V9DX9-VDY8T VS2010 : YCFHQ-9DWCY-D ...
- ubuntu14.04下安装cudnn5.1.3,opencv3.0,编译caffe及配置matlab和python接口过程记录
已有条件: ubuntu14.04+cuda7.5+anaconda2(即python2.7)+matlabR2014a 上述已经装好了,开始搭建caffe环境. 1. 装cudnn5.1.3,参照: ...
- 【java基础学习二】 数组相互转换,转成用逗号隔开的字符串等
/** * int[],Integer[],List,List<Integer>,HashSet<Integer>相互转换,转成用逗号隔开的字符串 */ public stat ...
- zookeeper dubbo 问题解决录
问题1: 运行起来不报错,不过在Console没有zookeeper的心跳信息,也就是说没有配置上zookeeper,而出错的原因是下面蓝色这段解析不了 spring-dubbo-provider.x ...
- leetcode 6. ZigZag Conversion
https://leetcode.com/problems/zigzag-conversion/ 题目: 将字符串转化成zigzag模式. 例如 "abcdefghijkmlnpq" ...