ES6的基础知识总结

一. ES6

  • ES6中定义变量使用 let/const
  • let
    1. 使用let定义的变量不能进行"变量提升"
    2. 同一个作用域中,let不能重复定义相同的变量名
    3. 使用var在全局作用域中定义的变量相当于给window增加了一个私有的属性,但是使用let定义的变量和window没有任何的关系
  • const
    1. 除了拥有let的那些特点之,const定义的变量是一个恒定的值(常量),存储的值是不能进行改变的
  • 块级作用域
    • ES5中的作用域只有两种
      • 全局作用域
      • 函数执行形成的私有作用域
    • ES6中的作用域多加了一种
      • 块级作用域:基本上凡是被"{<js code>}"包起来的都是块级作用域,块级作用域和之前学习的私有作用域一样,保护里面的私有变量不受外界的干扰;而且作用域链机制和之前相同
        • 每一次循环都会形成一个块级作用域,而i是每一个私有作用域中的私有变量
  • 箭头函数
    • function () {};
    • () => {};
    • let fn(a=0,b=0) =>a+b
      • 可以给形参设置默认值,而不是undefined
    • 箭头函数中的this会继承父级作用域中的this,例如在定时器中的回调函数,或自执行函数,不再是window,而是继承
    • 真实项目中混用箭头函数和普通函数,视情况选用
    • 箭头函数没有arguments,
    • 类的创建
    class Fn{
        //类,其中可以定义实例的私有属性
        constructor(){
            
        }
        //公有的方法
        eat(){
            
        }
        //作为类的私有属性
        static say(){
            
        }
    }
    • 类的继承(寄生组合式继承)
    class fn2 extends Fn{
        constructor(){
            //指的是fn2
            super();//继承了父类实例的私有属性
        }
        //继承父类的公共方法
        //不能继承父类的私有属性
    }
  • 对象中增加函数属性
    • 直接函数名(){},不需要用键值对的方式
    • 对象的解构赋值需要保证变量名和属性名一致才可以获取对应位置的值(默认情况下)
    • let {a:x,b:u,x;z}=obj 相当于在给原有的属性名设置别名
  • 扩展运算符"..."
    let ary=["ss",12,21];
    let [a,...b]=ary
    console.log(a)//->"ss"
    let fn=(info,...scoreAry){
        //可以弥补arguments的缺失,接受实参
    }

ES6

  • 其实就是对ES5的一个完善
  • 不是所有的浏览器都兼容,低版本浏览器就不兼容
  • 目前项目中使用ES6非常多(React大部分开发者都是基于ES6写的),因为ES6非常的方便
  • 我们需要把不兼容的ES6转换为兼容的ES3/ES5代码 =>"Babel"
  1. 块级作用域 从字面量理解 {}包含的就是一个块级作用域
  2. let 声明只在当前块级作用域起作用的变量
    • 利用块级作用域理解let
  3. const 常量 一旦定义了就不能改变的变量
    • 如果常量的值是基本数据类型的值就不能变
    • 如果常量的值是引用数据类型它的引用指针就不能变
var a=1;//在es5中,a是一个全局变量,相当于给window自定义了一个属性a,window.a,在es6中,它对全局对象window和全局作用域实现分离,但是为了保证兼容性,依然保留var声明的全局变量的特性,利用let声明块级变量来实现的只是相当于一个全局变量
posted @ 2017-10-09 13:12  Scar007  阅读(716)  评论(3编辑  收藏  举报