• ES6中的const,set,map,Symbol


    const,常量声明者

    1. 01-只在当前的代码块有效
    2. 02-作用域不会被提升
    3. 03-在一个作用域里不能重复声明
    4. 04-申明的常量必须立即赋值
    5. 05可以改变堆区的对象内容,不能修改栈区的地址(和其他语言如Java类似)
      这里写图片描述
    <!doctype html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
    
    <script>
    /*    //01-只在当前的代码块有效
        {
            const a = "zhangsan"
        }
        console.log(a);//报错*/
        //02-作用域不会被提升
        //03-在一个作用域里不能重复声明
    /*    //04-申明的常量必须立即赋值
    {
        const name;
        name = "zhangsan";
        console.log(name);
    }*/
        {
            const obj = {name : "张三"};
            console.log(obj);
    
            obj.name = "李四";
            console.log(obj);
        }
    
    </script>
    </body>
    </html>
    

    set,无重集合

    <!doctype html>
    <html lang="en">
        <head>
        <meta charset="UTF-8">
        <title>Document</title>
        </head>
        <body>
    
        <script>
            //1.创建集合
            let set = new Set(['张三','李四','李四']);
            console.log(set);
    
            //2.属性
            console.log(set.size);
    
            //03-四个方法 add delete has clear
            set.add('hehe').add('dada');
            console.log(set);
            console.log(set.delete('dada'));
            console.log(set);
    
            console.log(set.has('张三'));
            console.log(set.has('张三1'));
    
            set.clear();//这个就返回值了
            console.log(set);
    
        </script>
        </body>
        </html>
    

    map,键值对,弥补对象的局限性

    <!doctype html>
    <html lang="en">
        <head>
        <meta charset="UTF-8">
        <title>Document</title>
        </head>
        <body>
    
        <script>
    /*        //对象的局限性
            let obj1 = {a:1},obj2 = {b:2},obj = {};
            console.log(obj);
            obj.name = '张三';
            obj[obj1] ="天空";
            console.log(obj);
            obj[obj2] = "大海"
            console.log(obj);//被覆盖
    
            //原因就是内部把键做了字符串处理化
            console.log(obj1.toString());
            console.log(obj2.toString());
            console.log(obj1.toString() === obj2.toString());//true*/
    
            //引入Map
    
            //1.创建一个Map
            let obj1 = {a:1},obj2 = {b:2},obj = {};
            const  map = new Map([
                ['name','张三'],
                ['age','18'],
                ['sex','男'],
                [obj1,'今天天气很好'],
                [obj2,'适合敲代码'],
                ['age','50'],//覆盖前面的18
                [[1,2],'hh'],
            ]);
            console.log(map);
            console.log(map.size); //6 同样的键会被覆盖
    
            //set和get
            //set新增加键值对
            map.set('friends',['赵六','王五']).set(['dog'],'小花');
            //set获取
            console.log(map.get('name'));
            console.log(map.get(obj1));
    
            //delete ,通过键删除对
            map.delete(obj1)
            console.log(map);
    
            //has 是否存在该键
            console.log(map.has(obj1)); //false
            console.log(map.has(obj2)); //true
    
            //clear 清空
    
            //keys,values,entries
            console.log(map.keys());
            console.log(map.values());
            console.log(map.entries());//获取键值对
    
            //遍历
            map.forEach(function (value,key) {
                console.log(key + ":" + value);
            })
    
            //注意事项,对象都为空时,不会被覆盖,因为在堆区新开的对象地址都是不一样的
            map.set({},'hahaha');
            map.set({},'hehehehe');
            console.log(map);
            console.log({} === {});//false
    
        </script>
        </body>
        </html>
    

    Symbol,解决字符串命名冲突问题

    这里写图片描述

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>06-Symbol</title>
    </head>
    <body>
    <script>
    /*    //1.定义
        let str1 = Symbol();
        let str2 = Symbol();
        console.log(str1 === str2);
        console.log(typeof str1);
        console.log(typeof str2);*/
    
    /*    //2.描述
        let str3 = Symbol("name");
        let str4 = Symbol("name");
        console.log(str3);
        console.log(str4);
        console.log(str3 === str4);*/
    
        //3.对象的属性名
        const obj = {};
        obj.name = 'zhangsan';
        obj.name = 'lisi';
        obj[Symbol('name')] = 'zhangsan';
        obj[Symbol('name')] = 'lisi';
        console.log(obj);
    </script>
    </body>
    </html>
    
  • 相关阅读:
    CSS换行和省略号
    html+canvas实现很真实的下雨雨落
    CSS取消鼠标点击事件
    js某时间与当前时间差
    uniapp微信小程序canvas隐藏
    canvas生成圆图和微信小程序canvas圆图
    uniapp微信小程序canvas绘图插入网络图片不显示
    uniapp微信小程序分享(朋友圈分享)
    关于sure 等同根词的演化
    Stress and rhythm in English pronunciation
  • 原文地址:https://www.cnblogs.com/zhangmingzhao/p/8111547.html
Copyright © 2020-2023  润新知