[ES6] Compréhension et syntaxe d'ES6

Pourquoi apprendre l'es6 ?

  1. déficit congénital es5
  2. Le framework Vue React utilise Es6. L'auteur pensait initialement qu'il ne pouvait pas comprendre Vue, mais a découvert plus tard qu'il ne pouvait en fait pas comprendre la syntaxe Es6/(ㄒoㄒ)/~~
  3. Actuellement, la plupart des entreprises utilisent Es6

ES6 est la norme pour le langage JS. L'objectif est d'écrire des applications complexes à grande échelle et de devenir un langage de développement au niveau de l'entreprise. Babel : connu
comme le compilateur JS de nouvelle génération, peut transformer es6 en es5.

Nouvelles fonctionnalités ES6

commandes let et const

Let et const servent à déclarer la variable
let de la même manière que var :

    //这样写会把a变量提升到最上面,但是不赋值,所以会打印undefined
    console.log(a);
    var a = 2;

    //这样写会报错,因为let不会提升变量
    console.log(b);
    let b = 10;

    //let是一个块级作用域
    console.log(c1) //不报错
    console.log(c2) //报错
    if(true){
    
    
        var c1 = 1;
        let c2 = 1;
    }

    // let 不能重复声明 , var就可以
    let d = 1;
    let d = 2; //报错

const : En plus des trois restrictions de let, il a également la particularité de ne pas pouvoir être modifié une fois déclaré, ce qui équivaut à déclarer une constante.

chaîne de modèle es6

Dans le passé, si vous vouliez concaténer une chaîne, vous deviez faire ceci

    <div class="box">
    </div>

    <script>
        const oBox = document.querySelector('.box');
        let id = 1,
            name = "小帅";
        oBox.innerHTML = "<ul><li><p id="+id+">"+name+"</p></li></ul>"
    </script>

es6 peut ajouter rapidement des chaînes de modèles

    <script>
        const oBox = document.querySelector('.box');
        let id = 1,
            name = "小帅";
        
        let htmlStr = `<ul>
            <li>
                <p id='${ 
        id}'>${ 
        name}</p>
            </li>
        </ul>`;
        oBox.innerHTML = htmlStr;
    </script>

Fonctions améliorées

Opération d'attribution de valeur par défaut

    //es5
    function add(a,b) {
    
    
        a = a || 10;
        b = b || 20;
        return a+b;
    }
    //es6
    functon add(a = 10 , b = 20){
    
    
        return a+b ;
    }

L'expression par défaut peut aussi être une fonction

    function getVal(val){
    
    
        return val+5;
    }
    //默认值可以直接为表达式
    function add(a,b = getVal(5)){
    
    

    }

paramètres restants

    let book = {
    
    
        title:"aa教程",
        author:'zs',
        year:2023
    }
    //eas5 写法
    function pick5(obj) {
    
    
        let result = Object.create(null);
        for(let i = 1; i < arguments.length ; i++){
    
    
            result[arguments[i]] = obj[arguments[i]];
        }
        return result
    }
    //es6 剩余参数的写法 由三个点和一个紧跟着的具名参数指定
    function pick6(obj,...keys) {
    
    
        let result = Object.create(null);
        for(let i = 0 ; i < keys.length ; i++){
    
    
            result[keys[i]] = obj[keys[i]];
        }
        return result;
    }
    let bookData5 = pick5(book,'author','year');
    let bookData6 = pick6(book,'author','year');
    console.log(bookData5);
    console.log(bookData6);

opérateur de propagation

    //剩余运算符,把多个独立的合到一个数组中
    //扩展运算符:将一个数组分割,并且将各个项作为分离的参数传给函数
    const arr = [10,20,30,50,60,100];
    console.log(Math,max.apply(null,arr)); //es5写法
    console.log(Math.max(...arr));  //扩展运算符写法

fonction flèche

    //使用 => 来定义 
    // function(){}等于 ()=>{}
    let add = function(a,b) {
    
    
        return a+b;
    }
    //es6写法
    let add6 = (a,b)=>{
    
    
        return a+b;
    }
    //一个参数
    let add1 = val => {
    
    
        return val+5;
    }
    //再简便就是
    let add2 = val => (val+5);

    //函数嵌套
    let fn = (() => {
    
    
        return () => {
    
    
            console.log('hello world');
        }
    })();
    fn();

    //箭头函数的this绑定
    let PageHandle5 = {
    
    
        id:123,
        init:function (){
    
    
            document.addEventListener('click',function(event) {
    
    
                this.doSomethings(event,type);
            }.bind(this),false)
        },
        doSomethings:function(type){
    
    
            console.log(`事件类型:${
      
      type},当前id:${
      
      this.id}`);
        }
    }
    PageHandle5.init();
    //es6
    let PageHandle6 = {
    
    
        id:123,
        init:function (){
    
    
            document.addEventListener('click',(event) => {
    
    
                this.doSomethings(event,type);
            },false)
        },
        doSomethings:function(type){
    
    
            console.log(`事件类型:${
      
      type},当前id:${
      
      this.id}`);
        }
    }
    PageHandle6.init();

Remarque
1. Il n'y a aucun argument dans les fonctions fléchées
2. Les fonctions fléchées ne peuvent pas utiliser le nouveau mot-clé pour instancier des objets

Mission de déstructuration

L'affectation de déstructuration est une extension de l'opérateur d'affectation
. Il opère sur les tableaux et les objets.
Avantages : Écriture de code concise

    let node = {
    
    
        type : "c",
        name : "zs"
    }
    //es5
    let type = node.type;
    let name = node.name;
    //es6 - 完全解构
    let {
    
    type,name} = node;

    //再如 - 不完全解构
    let obj = {
    
    
        a:{
    
    
            name:'张三'
        },
        b:[],
        c:'helloWorld'
    }
    let {
    
    a} = obj
    //可以使用剩余运算符
    let {
    
    a,...res} = obj;

    //也可以对数组进行解构,参数名随便取

Fonctions de chaîne, d'objet et de tableau étendues

Fonctionnalité d'objet étendue :

  1. es6 écrit directement des variables et des fonctions en tant que propriétés et méthodes d'objets
    const name = 'zs',age = 20;
    const person = {
    
    
        name, //等价于name:name
        age
        sayName(){
    
    
            console.log(this.name);
        }
    }

    //可以出来给对象添加值,用[]来拼接名字
    const obj = {
    
    };
    obj.isShow = true;
    const name = 'z';
    obj[name + 's'] = 21;
    console.log(obj);

est() ===

    //比较两个值是否严格相等
    console.log(NaN === NaN) //false,特殊
    //is()是严格比较,啥都相同
    Object.is(NaN,NaN);

attribuer()

    //对象的合并
    //Object,assign(target,obj1,obj2,....)
    let target = {
    
    
        name:'zs'
    }
    target = Obj.assign(target,{
    
    a:1},{
    
    b:2});

Symbole

Symbol est un nouveau type de données primitif fourni par es6.
Il représente une valeur unique.

    const name = Symbol('name');
    const name2 = Symbol('name');
    console.log(name === name2) //false

Sa plus grande utilisation : utilisé pour définir des variables privées d'objets

    let s1 = Symbol('s1');
    console.log(s1); //Symbol('s1')
    let obj = {
    
    };
    obj[s1] = 'zs';
    //或者这么直接复制
    let obj2 = {
    
    
        [s1]:'zs'
    }
    //如公用Symbol定义对象中的变量,取值时一定用[变量名]
    console.log(obj[s1]);

    //通过反射得到Symbol声明的属性名 (作为对象的key)
    const syms = Object.getOwnPropertySymbols(ibj);
    console.log(syms[0]);

    let syms1 = Reflect.ownKeys(obj);

Carte et ensemble

Set : une liste ordonnée sans valeurs en double

    let set = new Set();

    //添加元素 ,任意类型
    set.add(2)// 删除元素
    set.delete(2);
    set.has(2); //判断有无
    set.size; //大小

    //将set转换成数组
    let set2 = new Set([1,2,3,4,5,6,7,8]);
    let arr = [...set2]; // 通过扩展运算符来进行操作

    //set中对象的引用无法被释放
    let set3 = new Set(),obj = {
    
    };
    set.add(obj);

    obj = null; //释放资源 , 这里无法释放
    //解决方法- 使用WeakSet
    let set4 = new WeakSet(),obj2 = {
    
    }
    set.add(obj2);
    obj = null; //这里可以直接释放,set4中的obj2没了

WeakSet
1. Impossible de transmettre des paramètres de type non-objet
2. Non itérable
3. Non forEach()
4. Pas de taille

Map : est une liste ordonnée de paires clé-valeur. Les clés et les valeurs sont de tout type. Set est une Map dont les clés sont égales aux valeurs.

    let map = new Map();
    map.set('key','value');

    //或者这样创建
    let map2 = new Map(['key1','value1'],['key2','value2']);
    //forEach遍历
    map.forEach((val,key) =>{
    
    

    })

Je suppose que tu aimes

Origine blog.csdn.net/qq_67548292/article/details/131724727
conseillé
Classement