ES6常用语法

let

1、使用let声明变量,只能在代码块内有效

{
    let a = 1;
    consolse.log(a)//1
}

2、使用let声明的变量,在预解析的时候不会被提升

{
    console.log(a);//undefined
    var a = 1;
}

{
    console.log(a);//报错
    let a = 1;
}

3、let不允许在同一个作用域下声明已经存在的变量

{
    <!--报错-->
    var a = 1;
    let a = 2;
}

const

1、const声明常量,常量值不能改变,声明的时候必须赋值

{
    const a = 1;
conlose.log(a);//12
}

2、基本数据类型

{
    var a = 1;
    var b = a;
    b = 2;
    console.log(a);//1
}

3、引用数据类型

{
    var a = {attr:1};
    var b = a;
    b.attr = 2;
    console.log(a.attr);//2
}
{
    const a = {b:1};
    a.b = 2;
    console.log(a);//{b:2}
}

set

1、ES6提供的一个新的数据结构,它类似于数组,但是成员的值都是唯一的,没有重复的值。
set本身是一个构造函数,用来生成set数据结构

{
    let s = new Set([1,2,3);

    console.log(s);//输出set()数组
    
    console.log(s.size)//输出set数组的长度
}

2、添加

{
    let s = new Set([1,2,3);
    s.add('a').add('b').add('c');
    console.log(s);//添加a,b,c
}

3、删除

{
    let s = new Set([1,2,3);
    console.log(s.delete('a'));//删除a
    console.log(s)
}

4、has()包含,判断该值是否为set的成员,返回的是一个boolean

{
    let s = new Set([1,2,3]);
    console.log(s.has('a')//false
}

5、clear()清除所以数据,没有返回值

{
    let s = new Set([1,2,3]);
    s.clear();
    console.log(s);//set(0)
}

6、key和values

{
   let s = new Set([1,2,3]);
   console.log(s.key());
   consloe.log(s.values());//返回整个数组的key和value值
}

7、entries将对象转为Map格式entries

{
    let s = new Set([1,2,3]);
    console.log(s.entries())
}

8、forEach

{
    let s = new Set([1,2,3]);
    s.forEach(function(value,key,set){
        console.log(set)
    }
}

解构赋值

1、解构赋值

    let [a,b,c] = [1,2,3];
    console.log(a,b,c)//1 2 3
}

2、空数组解构不成功

{
    let [a] = [];
    console.log(a);//undefined
    console.log(typoef null)//object
}

3、字符串会被解析成类数据

{
    let [a,b,c,d]= '1234';
    let {length:len} = '123456'
    console.log(len);//6
}

4、null和undefined不能被解构赋值

    let [a] = undefind;
    console.log(a)//报错
}

掌握es6的应用

(一).ES6中的模块

ES6 模块的设计思想是尽量的静态化,使得编译时就能确定模块的依赖关系

一个文件就是一个模块,想让外部能使用这个变量就必须export变量

1).模块的导出和模块的导入

模块导入会导致变量提升,并且import语句只能用在最顶层作用域上。

  • export let a = 1;  // export导出的是接口不是具体的值
    import * as obj from './a.js';
    import {a} from './a.js';
    

2).模块的动态绑定

  • let obj = 1;
    setInterval(()=>{obj++;},1000) //   外部使用这个变量也会发生变化
    export {
        obj
    };
    

3).模块导出的命名问题

  • export {
        a as default,
        b,
    }
    import _,* as obj from './a.js';
    console.log(_,obj);
    _ = '不能修改变量'
    
    

4).模块的默认导出

  • export default a // 只是导出的时候给a重命名为default而已,default后面导出的都是具体的值
    export {
        b,
    }
    

5).导入模块并导出

  • export let a = 1;
    export {obj} from './b.js'; // 当前模块下并不能使用obj这个值
    

6).import 动态导入语法

  • import('./a.js').then(data=>{
    console.log(data.default);
    });
    

(二).ES6中的类

在es6之前生成实例对象是通过构造函数的方式,在es6中提供了类

构造函数类的继承方式

  •  Animal.call(this)
     Tiger.prototype.__proto__ = Animal.prototype;
     Object.setPrototypeOf(Tiger.prototype,Animal.prototype)
     Tiger.prototype = Object.create(Animal.prototype,{constructor:{value:Tiger}});
     Tiger.prototype = new Animal();
    

1).new.target用法

  • class Animal {
        constructor(){
            if(new.target === Animal){
                throw new Error('不能实例化动物类');
            }
        }
        eat(){ console.log('吃饭') }
    }
    class Tiger extends Animal{}
    let animal = new Animal();
    animal.eat();
    

2).类的访问器用法

  • class Tiger extends Animal{
        constructor(){
            super();
            this._age = 10;
        }
        get age(){
            return this._age;
        }
        set age(val){
            this._age = val;
        }
    }
    let tiger = new Tiger();
    

3).静态方法和静态属性

  • class Animal {
        eat(){
            console.log('吃饭')
        }
        static type(){
            return '哺乳类'
        }
        static get MyKind(){
            return '老虎'
        }
    }
    class Tiger extends Animal{
    }
    console.log(Tiger.MyKind);
    

4).super的应用

  • class Animal {
        eat(){
            console.log('吃饭')
        }
        static type(){
            return '哺乳类'
        }
    }
    class Tiger extends Animal{
        constructor(){
            super();// 指代的是父类
        }
        static getType(){
            return super.type(); // 指代的是父类
        }
        eat(){
            super.eat(); // 指代的是父类原型对象
        }
    }
    let tiger = new Tiger();
    console.log(Tiger.getType());
    console.log(tiger.eat());
    
    

5).装饰器的应用

装饰器最终需要返还一个函数

  • 
    @log1()
    @log2()
    class MyClass{}
    function log1(){
        console.log('outer1')
        return function(target){ // 装饰类指代的是当前类本身
            console.log('inner1');
        }
    }
    function log2(){
        console.log('outer2')
        return function(){
            console.log('inner2');
        }
    }
    

6)修饰类中原型上的方法

  • class MyClass{
        @enumerable(false) // 是否可枚举
        getName(){
            return 'hello';
        }
    }
    function enumerable(boolean){
        return function(target,key,descriptor){
            //value.enumerable = true;
           return {
                ...descriptor,    
                enumerable:boolean,
           }
        }
    }
    

7.)修饰类中实例的属性

 class MyClass{
     @readonly PI = 3.14
 }
 
 function readonly(target,key,value){
     value.writable = false;
 }   
 let my = new MyClass();
 my.PI  = 3.15;
 console.log(my.PI)
 
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容

  • ES6语法跟babel: 一、首先我们来解释一下什么是ES? ES的全称是ECMAScript。1996 11 ,...
    Mooya_阅读 975评论 0 0
  • ES6 是什么 ECMAScript 2015 于2015年6月正式发布 可以使用babel语法转换器,支持低端浏...
    我是嘉炜阅读 188评论 0 2
  • ES6阮一峰老师的书已经出到第三版了,从中受益匪浅,第二版读了三遍,在项目中常用到的一些语法和方法做些总结 字符串...
    任雨丶阅读 15,548评论 0 11
  • ES6阮一峰老师的书已经出到第三版了,从中受益匪浅,第二版读了三遍,在项目中常用到的一些语法和方法做些总结 字符串...
    程芬KELA阅读 502评论 0 0
  • 一、相关背景介绍 我们现在大多数人用的语法javascript 其实版本是ecmscript5,也是就es5。这个...
    sunnyghx阅读 739评论 0 2