ES6 - 新增内容【某些部分未修改完成!】

解构赋值

        let obj = {
            a: 1,
            b: 2
        }
        // console.log(obj);
        // let a = obj.a;
        // let b = obj.b;
        // console.log(a, b);
        // ES6中的写法!
        // 对象的解构赋值要求变量名和对象的属性名必须保持一致!
        let {a, b} = obj;
        console.log(a, b);

数组解构

        let arr = ["a", "b", "c"];
        let [e, f] = arr;
        console.log(e, f);
        let a = 0;
        let b = 1;
        // 怎么快速交换a和b的值!
        [a, b] = [b,a];
        console.log(a, b)

字符串的解构赋值

/ 字符串的构解赋值和数组解构是差不多的!
        let str = 'lvhang';
        let [a, b] = str;
        console.log(a, b)

展开运算符

        let arr = [1, 2, 3, 4];
        let arr2 = ["a", "b", ...arr, "c", "d"];
        console.log(arr2)
        console.log(arr2.length); // 8
        // 展开运算符 顾名思义,就是把数组中的元素,一个一个展开出来, 成为单个的元素!
        // 剩余参数 [就是展开运算符 + 解构赋值的妙用!]
        let [a, b, ...c] = arr;
        console.log(a, b, c);

对象展开

    let obj = {
        a: 1,
        b: 2
    };
    let obj2 = {
        ...obj,
        c: 3,
        d: 4
    };
    console.log(obj2)
    let {a, b, ...c} = obj2;
    console.log(a, b, c);

    // 可以用obj的解构来避免浅拷贝!
    let obj3 = {...obj};
    obj3.a = 1000;
    console.log(obj, obj3)

Set

        // set本身就是一个函数
        // 用来构建对象
        // 专业说法: 就是一个构造函数. 用来构建某一类型的对象 - 【构建的对象的过程我们把它叫做】对象的实例化
        // Set的参数可以是数组或者是类数组
        let arr = [1, 1, 2, 2, "a", 3, 4];
        let s = new Set(arr);
        console.log(s)
        // 它可以帮助我们对传进去的数组进行去重!
        arr = [...s]; // 这是展开运算符
        console.log(arr)
        // size属性 他返回他最后保留的元素的个数[也就是数组去重之后的个数]
        // 数值的个数 ====> 相当于 length
        console.log(s.size)
        // s.clear(); // 清空所有值 返回值是undefined
        // console.log(s)
        // s.delete("a"); // 删除某一项 返回一个布尔值 成功true 失败 false
        // console.log(s)
        // 添加
        s.add(6);
        // s.has(); 查看是否包含某一项
        console.log(s.has("a")) // true
        console.log(s.has(6)) // true
        console.log(s)

        /**
         *
         set.clear(;l/清空所有值
        set.delete(val)删除某一项参数:
            val要删除的值返回值:
            true ll false是否删除成功(没有这个值才会出现删除不成功)
        set.has(val)是否包含某一项
            参数:
                val要查找的值返回值:
                truell false是否包含这个值
        set.add(val)添加一项
            参数:
                val要添加的项
          返回值:
                set对象本身

         *
          */

Map

        let arr = [
            // 这儿必须用迭代器的写法!
            // 也就是你必须以这种方式来进行传值!
            ["a", 1],
            ["b", 2],
            ["c", 3]
        ];
        let m = new Map(arr);
        console.log(m)
        // clear 清空所有值!
        // m.clear();

        // delete(key) 删除某一项
        // 参数: 数据的key值
        // 返回值:true ll false是否删除成功(没有这个值才会出现删除不成功)
        // console.log(m.delete("a")); // true

        // get(key) 获取某一项的值!
        console.log(m.get("b")); // 2
        console.log(m);

        // has(key) 是否包含某一项!
        // 有, 就返回true, 无, 则返回false
        console.log(m.has("c")); // true

        // set(key, value) 设置一个值!同时也可进行修改!
        // 返回添加后的Map对象!
        console.log(m.set("d", 'lvhang'));

箭头函数【省略!】

数组新增方法

Array.from()

<body>
    <ul id="list">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>
    <script>

        // // 数组 构造函数下面的方法!

        /*
            Array.from(类数组) 把一个类数组转换成真正的数组
                类数组: 有下标, 有length
                返回值: 转换之后的新数组!
                他是构造函数下面的一个方法,不是数组哈!
        */
        let lis = document.querySelectorAll("#list li");
        console.log(lis);
        console.log(typeof lis);
        console.log(lis instanceof Array); // false 说明是类数组!
        console.log(Array.isArray(lis)); // false
        // 把类数组转换成数组!
        lis = Array.from(lis);
        console.log(lis);
        console.log(lis instanceof Array); // true

    </script>
</body>
<body>
    <ul id="list">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>
    <script>
        let lis = document.querySelectorAll("#list li");
        let arr = [];
        // 第二个参数可以接收一个函数,也就是map函数!
        // 替换 根据返回值生成一个新数组!
        // 第三个参数就是this指向!
        // 这儿就需要注意了, 箭头函数的this指向的是他声明时所在的作用域!
        // 所以 修改this指向最好不要用箭头函数!

        // lis = Array.from(lis, function(item, index) {
        //     console.log(index, item, this)
        //     return index;
        // }, arr);

        // 当然,还有一种更加简单的方法把类数组转换成数组,就是使用扩展运算符!
        let lisn = [...lis]
        console.log(lisn);
    </script>
</body>

Array.of()

        {
            // 返回一个由参数组成的数组
            console.log(Array.of(1, 2, 3, 4, "A"))
        }

Array.isArray()

        let arr = [];
        let o = {};
        // Array .isArray(要检测的数据) 检测某个数据是否是数组! 
        console.log(Array.isArray(arr), Array.isArray(o)); // true false

数组本身增加的方法!

find 方法

        let arr = ["a", "b", "c", "d"];
        console.log(arr.indexOf("a")); // 返回元素在数组中的索引!没有就返回-1

        // find 就是查找数组元素中的满足要求的第一个元素的值!如果有就返回这个值,没有找到就返回undefined
        // 找到元素之后就立即终止循环!
        let val = arr.find((value, index, arr) => {
           if (value >= "a") {
               return true, index;
           }
        })
        // 简写方式
        //  val = arr.find(value => value >= "b");
        console.log(val); // c

findIndex

        {
            let arr = ["a", "b", "c", "d"];
            // let val = arr.findIndex(value => {
            //     if (value > "c") {
            //         return true;
            //     }
            // })
            //就是查找符合条件的数组元素,然后返回其索引!
            let val = arr.findIndex(value => value >= "c")
            console.log(val);
        }

数组扁平化 flat | flatMap

        {
            // 把二维数组转化成一维数组【就是数组扁平化】
            let arr = [
                ["小明", "18"],
                ["小刚", "18"],
                [
                    [1,
                        [3, 4]
                    ]
                ]
            ]
            // 可以指定数组扁平化的层数
            // 如果不知道层数的话,那就直接写Infinity
            console.log(arr.flat(3));
            console.log(arr.flat(Infinity));
        }

        // flatMap()
        // 他只能扁平化一层的数据!
        let arr2 = [
            ["小明", "18"],
            ["小刚", "18"]
        ];
        // 传入回调函数
        let newArr = arr2.flatMap((value, index) => {
            console.log(value, index)
            // 我只想要数组的第一位
            value = value.filter((value, index) => {
                return index == 0
            })
            return value;
        })
        console.log(newArr);

fill 填充元素

        let arr = [1, 2, 3, 4];
        // 第一个是我们要填充进去的数据!
        // 下面的操作会把原来的数组中的元素全部替换成'lvhang'
        // 但是不会修改原来数组的长度!
        // arr.fill('lvhang');
        // console.log(arr);

        // 第二个元素是 从哪个位置开始替换!
        // 第三个参数是在哪儿停止!
        // 包含开始, 不包括结束!
        arr.fill('lvhang', 0, 1);
        console.log(arr)

includes

        let arr = [1, 2, 3, 4];

        // 判断数组中是否包含一个指定的值!
        // 第二个参数就是从指定的位置开始查询!
        console.log(arr.includes(1)) // true
        console.log(arr.includes(1, 3)) // false

字符串新增方法

        // includes 和数组的一样!

        // startsWith 判断字符是以那个字符开始的!
        // endsWith 判断字符是以那个字符结束的!

        // 第二个参数是从字符串的那个位置开始匹配!
        let str = "我和吕成鑫";
        console.log(str.startsWith('我')) // true
        console.log(str.startsWith('我', 0)) // true
        console.log(str.startsWith('我', 1)) // false
        console.log(str.endsWith('吕成鑫')) // true
        console.log(str.endsWith('吕成鑫')) // true
        console.log(str.endsWith('吕', 3)) // true

        // repeat()
        let str2 = "a";
        let res = str2.repeat(30);
        // res 的长度1就等于 字符串元素的个数乘以重复的次数!
        console.log(res); // 30个a
        console.log(res.length); // 30

模板字符串

<body>
    <p><strong></strong> 就要<strong></strong> 岁了, 终于升入了 <strong></strong> </p>
    <script>
        {
            let p = document.querySelector("p");

            let xiaoming = `小明`;
            let age = `18`;
            let school = `初中`;
            // 原始做法
            // p.innerHTML = ' <p><strong>' + xiaoming + '</strong> 就要<strong>' + age + '</strong> 岁了, 终于升入了 <strong>' + school + '</strong> </p>';

            // 模板字符串
            p.innerHTML = ` <p><strong>${xiaoming}</strong> 就要<strong>${age}</strong> 岁了, 终于升入了 <strong>${school}</strong> </p>`;
        }

        // ${} 插值表达式
        // 可以放函数
        // 三元表达式
    </script>
</body>

对象新增方法

        {
            let a = 0;
            let b = 1;
            // let obj = {
            //     a: a,
            //     b: b
            // }

            // 简洁表示法
            let obj = {
                a,
                b,
                // c: function () {
                //     console.log(a)
                // }
                // 函数简洁表示法
                c() {
                    console.log("a")
                }
            }
            console.log(obj)
            

            // 属性名表达式
            // 需求:让我们自定义的name成为对象的属性名!
            let name = '小明';
            let obj2 = {
                c() {
                    console.log("a");
                },
                // ES6新增方法
                [name]: 111
            }
            // 原始做法
            // obj2[name] = 111;
            console.log(obj2)

            // 对象合并!
            let obj3 = {
                a: 1,
                b: 2
            };
            let obj4 = {
                // 第一种方法就是剩余参数啦!
                // ...obj3,
                c: 3,
                d: 4
            };
            // 需求: 把obj3合并到obj4中!

            // 第二种方法就是Object.assign() 新增的!
            // 把后面的对象合并到前面的对象!
            Object.assign(obj4, obj3);
            var res2 = Object.assign({}, obj3, obj4);
            console.log(obj4);
            console.log(res2);

            // is 方法
            // 三等和is的某些!区别!
            console.log(Object.is(1, "1")); // false 不会进行类型转换!
            console.log(+0 === -0); // true 
            console.log(Object.is(+0, -0)); // false 
            console.log(Object.is(NaN, NaN)); // true 
            console.log(NaN === NaN); // false 

        }

posted @ 2021-06-23 17:52  lvhanghmm  阅读(50)  评论(0)    收藏  举报