关于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对象
  •   不允许重复声明
    1. var tmp = 123;
    2.  
    3. function func(arg) {
    4. //如果区块中存在let和const命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
    5. tmp = 'abc'; // ReferenceError ,还没有定义就会报错,变量不会提升
    6. let tmp;
    7. console.log(tmp); //现在使用tmp就不会报错
    8.  
    9. console.log(typeof undeclared_variable); //如果一个变量根本没有被声明,使用typeof反而不会报错。没有let之前,typeof运算符是百分之百安全的
    10.  
    11. let tmp = 'cctv'; //报错,不允许重复声明
    12. let arg = tmp; //报错,不允许重复声明参数

    const的特性

  •   和let5条特性相同
  •   是一个只读常量    声明后立马赋值,不然就会报错
  •   存储的是地址  所以最好不要使用对象,因为地址是不可更改的但对象内容可以改
    1. const foo = Object.freeze({});
    2.  
    3. // 常规模式时,下面一行不起作用;
    4. // 严格模式时,该行会报错
    5. foo.prop = 123;

2.变量的解构赋值 new

  数组的解构赋值

  1. var a = 1;
  2. var b = 2;
  3. var c = 3;
  4. //ES6允许写成下面这样,左边是数组,右边也是数组(如果不是数组,那么严格地说,不是可遍历的结构,参见《Iterator》一章),那么将会报错)
  5. var [a, b, c] = [1, 2, 3];
  6. //嵌套数组解构
  7. let [foo, [[bar], baz]] = [1, [[2], 3]]; // foo = 1 bar = 2 baz = 3
  8. //不完全解构,但会成功
  9. let [ , , third] = ["foo", "bar", "baz"]; // third = "baz"
  10. //不完全解构,但会成功
  11. let [x, , y] = [1, 2, 3]; // x = 1 y = 3
  12. //...tail代表数组
  13. let [head, ...tail] = [1, 2, 3, 4]; // head = 1 tail = [2, 3, 4]
  14. //允许变量有默认值,只要变量的赋值不严格等于undefined(null,number,或者boolean等的情况下就不使用默认值)
  15. [x, y = 'b'] = ['a', undefined]; // x='a', y='b'
  16. //默认值取值是比较懒惰的,如果默认值是表达式或者函数,那就先取到赋值,有赋值就不管函数或者表达式啦
  17. function f() {
  18. console.log('aaa');
  19. }
  20. let [x = f()] = [1];

  对象的解构赋值

  1. //先找到同名属性,比如左边的foo和右边的foo相对应,那么就把123值赋给obj.prop属性,所以这里真正赋值的是obj.prop而不是foo,见《对象的扩展》一章
  2. let obj = {};
  3. let arr = [];
  4. //这里如果不用圆括号括起来就会报错,括起来以后就是一个表达式
  5. //obj在这里面是子对象,也可以写成 { foo: obj{prop:undfined}, bar: arr[0] }
  6. ({ foo: obj.prop, bar: arr[0] } = { bar: true ,foo: 123});
  7.  
  8. //与数组一样,允许嵌套,和默认值,但是和数组不一样的就是对象可以不指定次序。

  字符串的解构赋值

  1. //字符串被转换成了一个类似数组的对象。
  2. const [a, b, c, d, e] = 'hello';
  3. a // "h"
  4. b // "e"
  5. c // "l"
  6. d // "l"
  7. e // "o"
  8. //类似数组的对象都有一个length属性,因此还可以对这个属性解构赋值。
  9. let {length : len} = 'hello';
  10. len //

  数值和布尔值的解构赋值

  1. //解构赋值时,如果等号右边是数值和布尔值,则会先转为对象。
  2. let {toString: s} = 123;
  3. s === Number.prototype.toString // true
  4.  
  5. let {toString: s} = true;
  6. s === Boolean.prototype.toString // true
  7. //只要等号右边的值不是对象,就先将其转为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值,都会报错

  函数参数的解构赋值

  1. function move({x, y} = { x: 0, y: 0 }) {
  2. return [x, y];
  3. }
  4.  
  5. move({x: 3, y: 8}); // [3, 8]
  6. move({x: 3}); // [3, undefined]
  7. move({}); // [undefined, undefined]
  8. move(); // [0, 0]

es6新特性(一)的更多相关文章

  1. ES6新特性概览

    本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony( ...

  2. ES6新特性之模板字符串

    ES6新特性概览  http://www.cnblogs.com/Wayou/p/es6_new_features.html 深入浅出ES6(四):模板字符串   http://www.infoq.c ...

  3. Atitit js版本es5 es6新特性

    Atitit js版本es5 es6新特性 Es5( es5 其实就是adobe action script的标准化)1 es6新特性1 Es5( es5 其实就是adobe action scrip ...

  4. ES6新特性:Proxy代理器

    ES6新特性:Proxy: 要使用的话, 直接在浏览器中执行即可, node和babel目前还没有Proxy的polyfill;,要使用的话,直接在浏览器中运行就好了, 浏览器的兼容性为:chrome ...

  5. ES6新特性(函数默认参数,箭头函数)

    ES6新特性之 函数参数的默认值写法 和 箭头函数. 1.函数参数的默认值 ES5中不能直接为函数的参数指定默认值,只能通过以下的变通方式:   从上面的代码可以看出存在一个问题,当传入的参数为0或者 ...

  6. ES6新特性简介

    ES6新特性简介 环境安装 npm install -g babel npm install -g babel-node //提供基于node的REPL环境 //创建 .babelrc 文件 {&qu ...

  7. 轻松学会ES6新特性之生成器

    生成器虽然是ES6最具魔性的新特性,但也是最难懂得的一节,笔者写了大量的实例来具体化这种抽象的概念,能够让人一看就懂,目的是希望别人不要重复或者减少笔者学习生成器的痛苦经历. 在说具体的ES6生成器之 ...

  8. 必须掌握的ES6新特性

    ES6(ECMAScript2015)的出现,让前端开发者收到一份惊喜,它简洁的新语法.强大的新特性,带给我们更便捷和顺畅的编码体验,赞! 以下是ES6排名前十的最佳特性列表(排名不分先后): 1.D ...

  9. 你不知道的JavaScript--Item24 ES6新特性概览

    ES6新特性概览 本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代 ...

  10. javascript ES6 新特性之 扩展运算符 三个点 ...

    对于 ES6 新特性中的 ... 可以简单的理解为下面一句话就可以了: 对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中. 作用类似于 Object.assign() ...

随机推荐

  1. Unity3D NGUI 给button按钮添加单间事件

    Unity3D中, NGUI 给button按钮添加单间事件的方法很多,在这里只给推荐一种比较常用的方法. 推荐方法:使用UIListener. 1.给button组价添加上UIListener.选择 ...

  2. 在网页中嵌入地图API

    1.登录百度地图api,地址:http://api.map.baidu.com/lbsapi/creatmap/index.html 2.设置你的地理位置 3.简单设置下地图功能.地图的宽度和高度根据 ...

  3. Thinkphp源码分析系列(三)– App应用程序类

    // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO ...

  4. arcgis_engine_develop_error_42

    解决: 今天在VS2013打开程序时,手工添加了pageLayoutControl隔一会弹出错误窗口:Provide your license server administrator with th ...

  5. JAVA-系统-【3】-java应用连接oracle正常,但是网页却报错java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

    这是因为jar包已经导入了项目的应用部分,网页的lib去没有导入. 导入以后还要刷新项目,最好重启tomcat,就解决了..

  6. linux 下 TeXmacs 作 Maple 18 的前端

    TeXmacs的maple 插件比较老,默认条件下无法运行maple 18.且默认情况下maple18不在系统的搜索目录中,导致TeXmacs中不显示 maple 的session.以下假设TeXma ...

  7. Hive的安装

    Hive的安装   第一步:解压并安装:第二步:配置 1)root用户下,解压后,改名为hive,并将hive文件夹赋给hadoop用户 tar -zxvf hive-0.9.0.tar.gz -C ...

  8. redis 事务

    概述 相信学过MySQL等其他数据库的同学对事务这个词都不陌生,事务表示的是一组动作,这组动作要么全部执行,要么全部不执行.为什么会有这样的需求呢?看看下面的场景: 微博是一个弱关系型社交网络,用户之 ...

  9. windows服务器的DDOS防御,

    抵御 SYN 攻击 SYN 攻击利用了 TCP/IP 连接建立机制中的安全漏洞.要实施 SYN 洪水攻击,攻击者会使用程序发送大量 TCP SYN 请求来填满服务器上的挂起连接队列.这会禁止其他用户建 ...

  10. Python自动化 【第十七篇】:jQuery介绍

    jQuery jQuery是一个兼容多浏览器的javascript库,核心理念是write less,do more(写得更少,做得更多),对javascript进行了封装,是的更加便捷的开发,并且在 ...