ES6学习笔记

目录

变量定义:

es5:

es6:

动态修改dom元素操作方式:

es5和es6区别

函数

1.更好地赋初始值

2.默认的表达式可以是一个函数

3.获取对象中的属性

4.扩展运算符...

 5.箭头函数

 解构赋值

扩展的对象和功能

 Symbol

Map和Set

​Set是一种数据结构,类似于数组,但成员的值都是唯一的。

Map数据结构,类似于对象,也是键值对的集合,但是键不仅仅局限于字符串,各种类型的值都可以。​

 数组的扩展功能

 迭代器

生成器

生成器的应用

 Promise

Promise的应用

Promise的方法

async和await

小结

Class类

类的继承

ES6的模块


变量定义:

es5:

var(会有变量提升问题),即在声明之前打印该变量不会报错,因为编译时自动将声明提升到了最上方(此时未赋初始值),所以打印时会打印出undefined。此外,var能重复声明变量,导致覆盖,而let则无此问题。

        var a = 2;
        var a = 4;
        console.log(a);

es6:

使用let和const,都是块级作用域,无变量提升问题且不可重复声明。const不能直接修改其本身,但能修改其中的属性。比如vue3的ref就是基于此的。建议在默认情况下使用const声明变量,只有在你知道该变量会被修改的时候使用let。

动态修改dom元素操作方式:

es5和es6区别

    <div class="box">

    </div>
    <script>
        const oBox = document.querySelector('.box');
        let id = 1,
            name = "字符串拼接";
        //es5
        oBox.innerHTML = "<ul><li><p id=" + id + ">" + name + "</p></li></ul>"
        //es6,使用``来拼接字符串,模板字符串
        oBox.innerHTML = `<ul><li><p id=${id}>${name}{</p></li></ul>`
    </script>

es5需要拼接的方式来将变量添加进去,而es6使用模板字符串` `(反引号)来直接添加变量。

函数

es6:

1.更好地赋初始值

直接在其中定义。

function(a=10,b=20){

}

2.默认的表达式可以是一个函数

function(a=10,b=getVal(5)){

}
function getVal(val){
    return val + 5
}

3.获取对象中的属性

es5可以通过arguments来获取传入函数对象的数据。

由于 JavaScript 允许函数有不定数目的参数,所以需要一种机制,可以在函数体内部读取所有参数。这就是arguments对象的由来。arguments 是一个对应于传递给函数的参数的类数组对象。只能在函数体内部使用,通过arguments[i]获取当前索引的数据,在正常模式小arguments的数据可以修改,但是在严格模式下则不能修改。

var f = function(a, b) {
  arguments[0] = 3;
  arguments[1] = 2;
  return a + b;
}
 
f(1, 1) // 5

es6剩余参数(由三个点...和一个紧跟着的具体参数指定 ...keys组成)

        function pick(obj, ...keys) {
            console.log(keys);
            let result = Object.create(null); //创建一个空对象
            for (let i = 0; i < keys.length; i++) {
                result[keys[i]] = obj[keys[i]];
            }
            return result;
        };
        let book = {
            title: "ES6",
            author: "作者",
            price: 25.5
        }
        let bookData = pick(book, 'title', 'author', 'price');
        console.log(bookData);

keys和bookData结果: 

 ...keys解决了arguments问题

4.扩展运算符...

剩余运算符是把多个独立的合并到一个数组中。

扩展运算符则是讲一个数组分割,并且将各个项作为分离的参数传给函数。

        const arr = [1,4,2,5,5,15,12]
        //es5处理数组中的最大值,使用apply
        console.log(Math.max.apply(null,arr));//15
        //es6处理数组中的最大值,使用扩展运算符
        //...将数组进行分割,然后max对每一项进行判断
        console.log(Math.max(...arr));//15

 5.箭头函数

使用=>来定义 function(){}等于()=>{}

        //es5
        let add1 = function(a, b) {
                return a + b;
            }
        //es6
        let add2 = (a, b) => (a + b)//表示{return a+b}
        let add3 = (a, b) => {
            return a + b
        }
        console.log(add1(1, 2));//3
        console.log(add2(1, 2));//3
        console.log(add3(1, 2));//3

        //箭头函数传入值返回对象
        let getObj = id =>({id:id,name:"ES6"})
        console.log(getObj(1));
        //等价于
        function getObj(id){
            return{
                id:id,
                name:"ES6"
            }
        }
        //闭包函数
        //es5
        let fn1 = (function() {
            return function() {
                console.log('es5');
            }
        })();
        //es6
        let fn2 = (() => {
            return () => {
                console.log("es6箭头函数");
            }
        })();
        fn1();//es5
        fn2();//es6箭头函数
        //this指向
        // //es5的this指向是取决于调用该函数的上下文对象
        let PageHandle = {
            id: 123,
            init: function() {
                document.addEventListener('click', function(event) {
                    console.log(this); //#document,因为添加事件时是给文档添加的,所以this发生了改变
                    //此时报错 this.doSomeThings is not a function,说明此时this指向不是PageHandle
                    this.doSomeThings(event.type)
                },false)//报错后通过
                //}.bind(this),false)将this传递过来解决
            },
            doSomeThings: function(type) {
                console.log(`事件类型是${type}`);
            }
        }
        PageHandle.init();

        //es6通过箭头函数解决this指向问题(箭头函数没有this指向,它内部的this值只能通过查找作用域链(此时init指向了PageHandle)来确定this)
        let PageHandle = {
            id: 123,
            init: function() { //此处不要使用箭头函数,否则会导致this指向window
                //将function(event)改为event=>,由于箭头函数没有this指向,只能通过查找作用域链来查找当前this指向,解决了this指向改变的问题
                document.addEventListener('click', event => {
                    console.log(this); //#document,因为添加事件时是给文档添加的,所以this发生了改变
                    //此时报错 this.doSomeThings is not a function,说明此时this指向不是PageHandle
                    this.doSomeThings(event.type)
                }, false)
            },
            doSomeThings: function(type) {
                console.log(`事件类型是${type}`);
            }
        }
        PageHandle.init();

        //注意事项
        //1.一旦使用箭头函数,则它内部就不会有arguments对象(因为没有作用域链了,此时this指向了window)
        //2.箭头函数不能使用new关键字来实例化对象(function既是一个函数,也是一个对象,所以可以new,但箭头函数不行)
        let Pe
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值