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>
相关文章
相关标签/搜索