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() ...
随机推荐
- Unity3D NGUI 给button按钮添加单间事件
Unity3D中, NGUI 给button按钮添加单间事件的方法很多,在这里只给推荐一种比较常用的方法. 推荐方法:使用UIListener. 1.给button组价添加上UIListener.选择 ...
- 在网页中嵌入地图API
1.登录百度地图api,地址:http://api.map.baidu.com/lbsapi/creatmap/index.html 2.设置你的地理位置 3.简单设置下地图功能.地图的宽度和高度根据 ...
- Thinkphp源码分析系列(三)– App应用程序类
// +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO ...
- arcgis_engine_develop_error_42
解决: 今天在VS2013打开程序时,手工添加了pageLayoutControl隔一会弹出错误窗口:Provide your license server administrator with th ...
- JAVA-系统-【3】-java应用连接oracle正常,但是网页却报错java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
这是因为jar包已经导入了项目的应用部分,网页的lib去没有导入. 导入以后还要刷新项目,最好重启tomcat,就解决了..
- linux 下 TeXmacs 作 Maple 18 的前端
TeXmacs的maple 插件比较老,默认条件下无法运行maple 18.且默认情况下maple18不在系统的搜索目录中,导致TeXmacs中不显示 maple 的session.以下假设TeXma ...
- Hive的安装
Hive的安装 第一步:解压并安装:第二步:配置 1)root用户下,解压后,改名为hive,并将hive文件夹赋给hadoop用户 tar -zxvf hive-0.9.0.tar.gz -C ...
- redis 事务
概述 相信学过MySQL等其他数据库的同学对事务这个词都不陌生,事务表示的是一组动作,这组动作要么全部执行,要么全部不执行.为什么会有这样的需求呢?看看下面的场景: 微博是一个弱关系型社交网络,用户之 ...
- windows服务器的DDOS防御,
抵御 SYN 攻击 SYN 攻击利用了 TCP/IP 连接建立机制中的安全漏洞.要实施 SYN 洪水攻击,攻击者会使用程序发送大量 TCP SYN 请求来填满服务器上的挂起连接队列.这会禁止其他用户建 ...
- Python自动化 【第十七篇】:jQuery介绍
jQuery jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多),对javascript进行了封装,是的更加便捷的开发,并且在 ...