首页 前端知识 js中Object和Map的区别

js中Object和Map的区别

2024-05-06 09:05:56 前端知识 前端哥 917 115 我要收藏

js中Object和Map的区别

Object是最常用的一种引用类型数据,可用于存储键值对的集合。

Map是键值对的集合,才会用Hash结构存储。(map是es6以后新增的)

共同点: 键值对的动态集合,支持增加和删除键值对

在这里插入图片描述在这里插入图片描述

不同点
1.构造方式

		// Object
        const obj = {
            a: 1,
            b: 2
        }
        const o = new Object()

        const o2 = Object.create();
        
        // map
        const map = new Map()

        const m = new Map([
            ['a', '1'],
            ['b', '2']
        ])

2.键的类型

		/*
            Object 键的类型:
                键类型必须是String或者Symbol,如果非String类型,会进行数据类型转换
        
        */
        const obj = {
            a: 1,
        }
        const arr1 = [1, 2]
        obj[arr1] = 'arr'
        console.log(obj); //这里把arr1中的数据变为了字符串

在这里插入图片描述

		/*
            Map 键的类型:
                可以是任意类型,包括对象,数组,函数等,不会进行类型转换。
                在添加键值对时,会通过严格相等(===)来判断键属性师范已存在
        
        */
        const m = new Map()

        m.set('a', 1)
        m.set('2', '2')
        m.set(2, 2)
        m.set(arr1, 'arr')
        console.log(m);

在这里插入图片描述

3.键的顺序

		/*
            Object 键的顺序:
                key是无序的,不会按照添加的顺序返回
                1.对于大于等于0的证书,会按照大小进行排序,对于小数和负数会当作字符串处理
                2.对于String类型,按照定义的顺序进行输出
                3.对于Symbol类型,会之间过滤掉,不会进行输出,
                  如果想要输出Symbol类型属性,
                  通过Object.getOwnPropertySymbol()方法    

        */
        const obj = {
            2: 2,
            '1': 1,
            'b': 'b',
            1.1: 1.1,
            0: 0,
            'a': 'a',
            [Symbol('s1')] : 's2',
            [Symbol('s2')] : 's1',
        }
        console.log(Object.keys(obj));

在这里插入图片描述

		/*
            Map 键的顺序:
                key是有序的,按照插入的顺序进行返回
                对于Symbol类型,不会过滤掉,会进行输出
        
        */
        const m = new Map()

        m.set(2, 2)
        m.set('1', 1)
        m.set('b', 'b')
        m.set(0, 0)
        m.set('a', 'a')
        m.set(Symbol('s1'), 's1');

        console.log(m.keys());

在这里插入图片描述

4.键值对size

		/*
            Object 键值对size:
                只能手动计算,通过Object.keys()方法或者通过for...in循环统计
        
        */
        const obj = {
            2: 2,
            '1': 1,
            'b': 'b',
        }
        console.log(Object.keys(obj).length);   //3

        /*
            Map 键值对size:
                直接通过size属性访问
        
        */
        const m = new Map()

        m.set(2, 2)
        m.set('1', 1)
        m.set('b', 'b')
        m.set(0, 0)
        m.set('a', 'a')
        m.set(Symbol('s1'), 's1');

        console.log(m.size);    //6

5.键值对的访问

		/*
            Object 键值对访问:
                1.添加或者修改属性,通过点或者中括号的形式
        */
        const obj = {
        }

        obj.name = '张三'
        obj.age = 18

        // 2.判断属性是否存在
        obj.name === undefined

        // 删除属性,通过delete关键字
        delete obj.name

        /*
            Map 键值对访问:
        
        */
        const m = new Map()

        // 添加和修改key-value
        m.set('name', '张三')
        m.set('age', 18)

        // 2.判断属性是否存在
        m.has('name')

        // 取值
        m.get('name')

        // 删除键值对
        m.delete('name')

        // 获取所有属性名
        m.keys()

        // 清空map
        m.clear()

6.迭代器

/*
            迭代器-for...of
            Object本身不具有lterator特性,默认情况下不能使用for..of进行遍历

            Map结构的keys(), value(), entries()方法返回值都具有lterator特性
        
        */

7.JSON序列化

        /*
            Object JSON序列化
                Object类型可以通过JSON.stringify()进行序列化操作

            Map结构的keys(), value(), entries()方法返回值都具有lterator特性

        */
        const o = {
            name: '张三',
            age: 18
        }
        console.log(o);
        console.log(JSON.stringify(o));

在这里插入图片描述

/*
            Map JSON序列化
                Map结构不能直接进行JSON序列化,可以通过其他手段进行序列化
        */
        const map = new Map([
            ['name', '张三'],
            ['age', 19]
        ])
        console.log(map);
        console.log(JSON.stringify(Array.from(map)));

在这里插入图片描述

8.应用场景

转载请注明出处或者链接地址:https://www.qianduange.cn//article/7180.html
标签
评论
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!