ECMAscript6(一)

es6(ECMAscript 2015)有哪些新特性

一、let和const

1. 没有变量提升

    console.log(a);
    let a = 4;
    // a is not defined

    console.log(a);
    const a = 4;
    // a is not defined

2. 不能重复申明

    let a = 4;
    let a = 5;
    console.log(a); // Identifier 'a' has already been declared

    const b = 4;
    const b = 5;
    console.log(b);// Identifier 'b' has already been declared
   

3. 具有块级作用域(JS中作用域有:全局作用域、函数作用域。没有块作用域的概念。ECMAScript 6(简称ES6)中新增了块级作用域。块作用域由 { } 包括,if语句和for语句里面的{ }也属于块作用域。)

  1)var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。

  2)let定义的变量,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。

  3)const用来定义常量,使用时必须初始化(即必须赋值),只能在块作用域里访问,而且不能修改。

   var a = 5;
    function foo(){
        console.log(a); // undefined
        if(false){
            var a = 6;
        }
    }
    foo()
  //因为 var 定义得变量可以跨块访问, 不能跨函数访问,所以输出得是undefined。
   var a = 5;
    function foo(){
        console.log(a); // 5,注意输出结果不是6
        if(false){
            const a = 6;
        }
    }
    foo();
//因为 const定义得变量可以跨块访问
   var a = 5;
    function foo(){
      console.log(a); //5
      if(false){ let a = 6; } 
  }
  foo();
  //因为 let定义得变量可以跨块访问

4. 临时失效区(暂时性死区)

var a = 5;
    function fn(){
        console.log(a);//a is not defined
        const a = 4;
    }
    fn();
var a = 5;
    function fn(){
        console.log(a);// a is not defined
        const a = 4;
    }
    fn();

二、for of 值遍历

我们都知道for in 循环用于遍历数组,类数组或对象,ES6中新引入的for of循环功能相似,不同的是每次循环它提供的不是序号而是值。

  var someArray = [ "a", "b", "c" ];

    for (v of someArray) {
        console.log(v);//输出 a,b,c
    }
    for (v in someArray) {
        console.log(v);//输出 0,1,2
    }

三、箭头操作符

 ES6中新增的箭头操作符=>,它简化了函数的书写。操作符左边为输入的参数,而右边则是进行的操作以及返回的值Inputs=>outputs。

  var array = [1, 2, 3];
    //传统写法
    array.forEach(function(v, i, a) {
        console.log(v, i, a);
    });
    //ES6
    array.forEach((v,i,a) => console.log(v,i,a));

输出

写法

    var arr=[2,3]
    var fn = (item) => {console.log(item)};
    var fn2 = item => {console.log(item)};
    var fn3 = item => (item);
    var fn4 = item => item;
    fn(arr);//(2) [2, 3]
    fn2(arr);//(2) [2, 3]
    fn3(arr);
    fn4(arr);
//    =>后使用小括号() 表示将结果作为返回值,单行结果时还可以省略当参数唯一时,还可以将前面的() 省略

注意:箭头函数不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。

猜你喜欢

转载自www.cnblogs.com/fanmiaolan/p/9888187.html
今日推荐