zoukankan      html  css  js  c++  java
  • ES6 常用语法

    一  什么是ES6?

      ECMAScript 6 简称ES6, 在2015年6月正式发布!!!

    二 常用语法

      1.声明变量 const/let/var

        ES6以前用var来声明变量,存在变量提升现象---会提前创建变量

        作用域也只有全局作用域和函数作用域---所以变量提升会在函数顶部或者全局作用域顶部

      **********************************************************************************************************************

        let 关键字表示变量,const 表示常量,都是块级作用域,比如一个函数内部,或一个{}内部。

      var

        var定义的变量可以修改,如果不初始化会输出undefined,不会报错

    1 var a = 1;
    2 // var a;//不会报错
    3 console.log('函数外var定义a:' + a);//可以输出a=1
    4 function change(){  
    5     a = 4;
    6     console.log('函数内var定义a:' + a);//可以输出a=4
    7 }
    8 change();
    9 console.log('函数调用后var定义a为函数内部修改值:' + a);//可以输出a=4

      const

        const定义的变量不可以修改,而且必须初始化

    1 const b = 1;    //正确
    2 const b;    //错误,必须初始化
    3 console.log('函数外const定义b:' + b);/有输出值
    4 //b = 5;
    5 //console.log('函数外修改const定义b:' + b);//无法输出

      let

        let是块级作用域,函数内部使用let定义后,对函数外部无影响

    1 let c = 3;
    2 console.log('函数外let定义c:' + c);//输出c=3
    3 funcion change(){   
    4     let c = 6;
    5     console.log('函数内let定义c:' + c);//输出c=6
    6 }
    7 change();
    8 console.log('函数调用后let定义c不受函数内部定义影响:' + c);//输出c=3

      let、const 和var的区别

        let和var的一个明显的区别就是没有变量提升:

     1 function fun1(){
     2     for(var i = 0; i <= 10;i++){
     3         
     4     }
     5     console.log(i);//11;--------var变量提升
     6 };
     7 fun1();
     8 function fun2(){
     9     for(let i = 0; i <= 10;i++){
    10         
    11     }
    12     console.log(i);//i is not defined;--------let没有变量提升
    13 };
    14 fun2();

           const和var的明显区别是,const声明的是常量,不可被后面的代码赋值改变:

    1 var x = 1;
    2 x = 2;
    3 console.log(x);//2;-----var声明的是变量,可被赋值替换
    4 
    5 const y = 1;
    6 y = 2;
    7 console.log(y);//Assignment to constant variable.;------const声明的是常量,不可改变

      2.模板字符串

     1 <body>
     2     <div id="head">
     3     </div>
     4     <script>
     5         let ele=`
     6             <div id="head">
     7                 <h1>模板字符串</h1>
     8                 <p>动态添加</p>
     9             </div>
    10             `;
    11         let ele_div=document.getElementById('head');
    12         ele_div.innerHTML=ele
    13     </script>
    14 </body>

      3.函数

        箭头函数,是函数的快捷写法,类比Python的匿名函数 lambda。

      最直观的三个特点

        -- 不需要function关键字来创建函数

        -- 省略return关键字

        -- 继承当前上下文的this关键字(因为箭头函数的调用者是当前上下文,跟普通函数区别开

     1 // 函数在哪里调用了 才决定this到底引用的是谁~~~
     2 // 最后一个调用函数的对象才是传到函数里的上下文对象this~~~
     3 
     4 console.log(this)
     5 
     6 function test() {
     7     console.log(this)
     8 };
     9 
    10 let obj = {
    11     a: 1,
    12     test: test,
    13 };
    14 
    15 let obj2 = {
    16     b: 3,
    17     obj: obj,
    18 };
    19 
    20 obj.test();
    21 test();
    22 obj2.obj.test();

      4.import 和 export

        略

      5.数据解构

     1  const people = {
     2         name: "提莫",
     3         age: 2,
     4     };
     5     const {name, age} = people;
     6     console.log(name);
     7     console.log(age);
     8     
     9     const person = ["瑞文", "刀妹"];
    10     const [name1, name2] = person;
    11     console.log(name1);
    12     console.log(name2)

      6.class / extends / super   

        ES6 引入了关键字class来定义一个类,constructor是构造方法,this代表实例对象

      类之间通过extends继承,继承父类的所有属性和方法。

      super关键字,它代指父类的this对象,子类必须在constructor中调用super()方法,

      否则新建实例时会报错,因为子类没有自己的this对象。调用super()得到this,才能进行修改。

     1 class Animal{
     2     constructor(){
     3         this.type = "animal"
     4     }
     5     says(say){
     6         console.log(this.type + "says" + say )
     7     }
     8 }
     9 
    10 let animal = new Animal()
    11 
    12 animal.says("hello")
    13 
    14 class Dog extends Animal{
    15     constructor(){
    16         super();
    17         this.type = "dog";
    18     }
    19 }
    20 
    21 let dog = new Dog()
    22 dog.says("hello")
  • 相关阅读:
    uvm设计分析——report
    report源码分析——report_handle和report_server和report_catcher
    report源码分析——宏的执行
    015-命令行下载安装brew
    011-多线程-基础-基于AbstractQueuedSynchronizer自定义同步组件
    010-多线程-JUC集合-Queue-ConcurrentLinkedQueue
    009-多线程-JUC集合-Queue-LinkedBlockingDeque
    008-多线程-JUC集合-Queue-LinkedBlockingQueue
    007-多线程-JUC集合-Queue-BlockingQueue接口以及ArrayBlockingQueue
    006-多线程-集合-Set-ConcurrentSkipListSet
  • 原文地址:https://www.cnblogs.com/wdbgqq/p/9833021.html
Copyright © 2011-2022 走看看