es6学习

Posted 做个机灵鬼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了es6学习相关的知识,希望对你有一定的参考价值。

let变量

1.不允许重复声明
2.存在块级作用域,常见块级作用域( if(), else(), for(), function())
3.不存在变量提升
4.不影响作用域链

const变量

1.声明变量时必须赋值
2.变量名一般采用大写
3.不允许变量修改
4.没有变量提升
5.存在块级作用域
6.声明对象或者数组是推荐使用const声明,const声明可以采用push等方法对数组进行修改

变量解构赋值(经常使用的对象方法或者数组元素时可以使用解构赋值)

  // 对数组的解构赋值
        const arr = ['张三','李四','李明'];
        // 数组里面对应三个变量
        let [zhang,li,ming] = arr;
        console.log(zhang,li,ming);
        // 对象的解构赋值
        const star = 
            name: '于谦',
            tags: ['抽烟','喝酒','烫头'],
            fn: function()
                console.log('可以表演相声');
            
        
     /*    let name,tags,fn = star;
        console.log(name,tags,fn); */
        let name,tags:[chou,he,tang],fn = star;
        // 当tags解析数组里面时,那么tags就不可以使用了
        // console.log(tags);
        console.log(chou,he,tang,);

模板字符串

1.直接使用反引号进行赋值多个标签
2.使用$()进行进行字符拼接

  // 反引号的使用
        let str = `<ul>
            <li></li>
            <li></li>
            <li></li>
            <li></li>
        </ul>`;
        console.log(str);
        // 反引号进行字符串拼接
        let satr = 'web';
        let str2 = `$satr工程师`;
        console.log(str2);

简化对象写法

es6中允许直接往对象里添加变量

 let mingc = '尚硅谷';
        let price = 10000;
        let fn = function()
            console.log('每天学习');
        
        const str = 
            mingc,
             price,
             fn,
            sum()
                console.log('11');
            
        
        console.log(str); 

箭头函数

1.箭头函数的声明

let fn = () => 
          console.log('箭头函数');
      

2.箭头函数的this指向是静态的,无法通过调用改变this的指向,this指向函数体外层的环境

let fn = function()
       
        console.log(this);
    
    fn.call(,2,4,6);
       fn.apply(,[1,2,3])
    fn.call()//传统的函数可以利用call apply方法改变函数this的指向,调用call方法后this指向call传入的空对象
       let add = () => 
         console.log(this);
       
    //    无法改变箭头函数的指向,指向window

3.箭头函数不能做构造函数
4.箭头函数不能使用argument ,argument是函数运行是的实参列表
5.箭头函数的简写

        //5.箭头函数简写
       //1.不写括号(),当函数有且只有一个形参时 可以不写小括号
       //2.不写花括号,当函数体只有一行时不写花括号 并且语句的执行结果为函数返回值,不写花括号也不能写return
      /*  let fn = n => 
           console.log(n);
       
       fn(100);
       //生成1~100的随机数
       let sum = (n,m) =>  Math.ceil(Math.random() * (n-m+1)+ m);
       console.log(sum(1,100)); */

箭头函数的使用场景

1.this与函数体有关时不能使用 例如
事件的回调函数 ,对象的方法
2.适合使用箭头函数的
事件内的定时器的回调函数,数组的一些回调方法 filter map forEach

 // 两秒后盒子背景颜色变为粉色
        let ad =document.querySelector('.box');
        ad.onclick = function()
             //保存this,使用箭头函数则不用保存this,函数的外部环境的this指向事件源
            // let _this = this;
           setTimeout(()=>this.style.backgroundColor = 'pink',2000);
        
        // 2.选出一个数组的所有偶数
        let arr = [1,23,5,5,32,64,758,6,9,9,6,9,6,6,83,5,2];
       /*  let Arr = arr.filter(function(items)
            if(items % 2 ===0) 
                return true;
            
            else 
                return false;
            
        )
         console.log(Arr); */
        // filter 过滤 forEach map
        let Arr = arr.filter(items => items % 2 ===0);
        console.log(Arr);
        // 如果回调与this的值相关 则不能使用箭头函数 
        // 1.事件的回调函数 2.对象的方法
        //适合使用回调函数的场景,回调与this无关
        // 1.定时器 2.数组的一些回调方法 filter map forEach

rest参数(可用来替代argument)

可以获取到函数的所有实参,并返回一个数组,…对象名

 function main(...add) 
            // arguments用来获取所有实参
            console.log(arguments);//获取到函数运行的实参列表
            console.log(add);//把所有实参整合成一个数组返回
            // 输出一个数组的最大值 利用es6将数组打散...,Math.max方法是不能传入一个数组的
            console.log(Math.max(...add));

        
        main(1,23,4,5,);

扩位运算符

把一个数组或者对象去掉[]或者里面原有的数据不变

 let arr = ['李明','张三','李四'];
        function fn() 
            console.log(arguments);
        
        // ...arr会把数组进行展开 => '李明','张三','李四'
         fn(...arr);
        let killOne = 
            q:'天音波'
        
        let killTwo = 
            w:'神龙摆尾'
        
        let killThree = 
            e:'天雷破'
        
        let killFour = 
            r:'地动山摇'
        
        let user = ...killOne,...killTwo,...killThree,...killFour;
        console.log(user);

应用:数组合并,数组克隆,将伪数组转换为数组

Symbol数据类型

  // es6 提供了一种原始的数据类型 Symbol,表示独一无二的值
        let s1 = Symbol();
        console.log(s1);
        // 返回结果的false
         let s2 = Symbol('lili');
         let s3 = Symbol('lili');
         console.log(s2===s3);
        //  返回结果等于true
        let s4 = Symbol.for('lili');
        let s5 = Symbol.for('lili');
        console.log(s4===s5);
        // Symbol 不能与其他数据类型进行计算
       /*  let s6 = Symbol(11);
        console.log(s6+11); */
         const result = s1 + 123;

迭代器

迭代器iterator是一个接口,某种数据类型部署了这个接口就可以实现数据自定义遍历, iterator存在于 Array等数据原生具备iterator接口(可使用for of遍历数据)
数组的原型上具有Symbol.iterator这个方法,这个方法返回了一个指针对象,该指针对象指向数据的初始位置,指针对象里面有个next方法,每次调用next方法时 返回一个value和done值, value表示该数组的值,done返回一个布尔值,false则表示该数组未到遍历完
对象调用方法 通过.xxx 或者[]

 // 迭代器iterator是一个接口,某种数据类型部署了这个接口就可以实现数据biali
        // iterator存在于 Array等数据原生具备iterator接口(可使用for of遍历数据)
        const arr = ['刘德华','张学友','黎明','郭富城'];
        for(let i of arr) 
            console.log(i);
        
     /*    for(let i in arr) 
            console.log(i);
         */
       
        // 数组的原型上具有Symbol.iterator这个方法,这个方法返回了一个指针对象
        // 该指针对象指向数据的初始位置
        // 指针对象里面有个next方法,每次调用next方法时 返回一个value和done值
        // value表示该数组的值,done返回一个布尔值,false则表示该数组未到遍历完
        // 对象调用方法 通过.xxx 或者[]
        let s = arr[Symbol.iterator]();
        console.log(s.next());
        console.log(s.next());
        console.log(s.next());
        console.log(s.next());
        console.log(s.next());
        // 迭代器遍历自定义对象
         const team = 
            name: 'byte',
            member: [
                'one',
                'two',
                'three',
                'four'
            ],
            // 手动配置Symbol.iterator
            [Symbol.iterator]:function()
                // 方法里面返回一个指针对象
                let index = 0;
                return 
                    
                    // 指针对象里面有个next方法
                      next : () => 
                        //   声明一个对象
                          const result =  value: this.member[index],done:false;
                        //   只要返回done的值是ture,for of 函数就会停止执行
                        if(index >= this.member.length) 
                           result.done = true;
                        
                          index++;
                         return result;
                      
                
            
        
        // 遍历对象的member值
        for(let i of team) 
              console.log(i);
        

以上是关于es6学习的主要内容,如果未能解决你的问题,请参考以下文章

ES6新语法之---对象字面量扩展模板字符串

ES6的对象属性简写

将属性从对象分配给 HTMLElement 的 es6/7 简写

javascript ES6的简写方法

es6对象简写

收藏 19 个 ES6常用的简写技巧