ES6

笔记参考以下链接:

阮一峰es6 http://es6.ruanyifeng.com/

1, ECMAScript2015,ES6,JavaScript,java区别与联系

(1)ECMA标准化组织,ECMAScript是标准,JavaScript是实现

(2)ECMAScript2015(ES2015)在2015年6月发布的ES6的第一个版本,ES6泛指JS5.1版本之后的下一代标准

(2)JavaScript与java基本上没有啥关系,如果要说有的话,那也是JavaScript在起名字的时候蹭了Java的热度而已。

2,let,const 与 var

(1)声明与赋值

let 声明变量(对同一变量不能重复赋值),

const 声明常量(声明与赋值在一起,而且赋值后,值不能发生变化),

var 声明变量(神一般的存在,可重复赋值,可变量提升)

console.log(a); //Uncaught ReferenceError: a is not defined; let无变量提升
let a=1; let a=2; //Uncaught SyntaxError: Identifier 'a' has already been declared
const b; //Uncaught SyntaxError: Missing initializer in const declaration

console.log(c); //undefined; c变量声明提升
var c=1; //var可以重复赋值(很容易引起错误)
var c=2;

(2)暂时性死区

在 let 和 const 存在的区块内,会绑定该区块,形成封闭作用域。

在变量未声明之前,是该变量的暂时性死区,引用该变量会抛出错误

(3)作用域(全局作用域,函数作用域,块级作用域)

 ES5 仅存在全局作用域和函数作用域, ES6 新增了块级作用域

  i,为啥要使用块级作用域(不使用会出现什么问题)

  问题一:内层变量可能覆盖外层变量

  问题二:计数循环的变量泄露为全局变量

  ii,块级作用域内可以声明函数

  方法:

if(true){
    let a=1;
    let b = function() {  // 块级作用域内声明函数,要写成函数表达式的形式,避免使用函数声明形式
        alert(b);
    };
}

(4)顶层对象

浏览器环境:window

node环境:   global

es5 : 同全局变量

es6: var 和 function 声明的全局变量是顶层对象; let 和 const 和class 和 import声明的全局变量不是顶层对象

 

3,解构赋值

(1)特点

  i,左右两边结构必须一致(模式匹配)

  ii,右边必须是个东西(必须是可遍历的解构)

  iii,声明和赋值不能分开(必须在一句话内完成)

let [a, b, c] = [1, 2, 3];  //数组解构赋值,其中a=1, b=2, c=3
let {aa, bb} = {aa:1, bb:2};  //json解构赋值,其中aa=1, bb=2;
let {foo:bar} = {box:1}; // 解构失败,则bar=undefined

//使用默认值,当右边的某一成员 === undefined 时,才会使用默认值
let [x=1, y=2,z=x] = [11,null]; //x=11, y=null, z=2. 因为null== undefined,但是不是严格相等,所以y=null; 右边的z没有赋值,=== undefined,所以使用默认值,为x的值
let [x=f()] = [1]; //x=1,当默认值为表达式,因为右边已经对 x 赋值了,所以f()不会调用当做默认值。

 

(2)解构赋值的使用

  i,数组的解构赋值

let [a, b, c] = [1,2,3]; //a=1, b=2, c=3,  数组按位置分别进行解构赋值

  ii,对象的解构赋值

let {a:b, c:d} = {a:1, c:2};  //b=1, d=2,

 

  iii,数值和布尔值的解构赋值

  iv,函数参数的解构赋值

(3)解构赋值的用途

 

posted @ 2018-07-06 22:25  小字辈  阅读(173)  评论(0编辑  收藏  举报