Objeck和Map区别

本文探讨了Objeck对象和Map数据结构的区别,包括数据类型限制、排序规则、操作方式和序列化特性。对象适用于键值对且类型明确的情况,而Map适合频繁增删改查且键名类型灵活的场景。重点介绍了如何用Map解决LeetCode两数之和问题.
摘要由CSDN通过智能技术生成

Objeck

1、它是一种最常见的引用类型的数据,可用于存储键值对的集合

2、键名都是字符串或者Symbol,非字符串类型会进行数据类型转换

3、定义对象:const obj = {} / new Object() / Object.create()

4、键名是无序的,大于0的整数,会按大小进行排序,对于小数和负数会当做字符串处理,Symbbol类型不会输出,通过Object.getOwnPropertySymbols()方法输出

5、长度: Object.keys(obj).length

6、JSON序列化:JSON.stringify(obj)

Map

1、它是键值对的集合,采用Hash结构存储,键名是

2、键名可以是任意数据类型,添加键时,会按照===来进行对比,注意NaN,NaN===NaN结果是false,但在Map这是为true的

3、定义一个Map:const map = new Map() / new Map([['a': 'a'], ['b': 'b']])

4、键名有顺序的,按插入的顺序返回

5、长度:直接size返回长度

6、不能直接序列化,JSON.stringfiy(Array.from(map))

总结

使用Object:数据类型确定是字符串或者Symbol、需要进行JSON序列化转换

使用Map:会频繁更新删除键值对、存储大量数据而且键名类型不确定

力扣第一题:

 

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let map = new Map()
    for(let i = 0; i < nums.length; i++}) {
        const num = target - nums[i]
        if (map.has(num)) {
            return [map.get(num), i]
        }
        map.set(item, i)
    }))
};

`Object.defineProperty` 和 `Proxy` 是 JavaScript 中用于操作对象的两种不同的机制。 `Object.defineProperty` 是一个用于直接定义对象属性的方法。它允许你定义新属性或修改现有属性的特性,比如可枚举性、可写性、可配置性等。通过使用 `Object.defineProperty`,你可以更精细地控制对象属性的行为。 例如,你可以使用 `Object.defineProperty` 来定义一个只读属性: ```javascript const obj = {}; Object.defineProperty(obj, 'name', { value: 'John', writable: false, }); obj.name = 'Alice'; // 这行代码不会改变属性的值,因为它是只读的 console.log(obj.name); // 输出: John ``` 然而,`Object.defineProperty` 只能对现有对象进行操作,并且需要逐个定义属性。如果你需要动态地拦截和自定义对象的操作,你可以使用 `Proxy`。 `Proxy` 是 ECMAScript 6 新增的特性,它提供了一种拦截并自定义 JavaScript 对象操作的机制。通过创建一个代理对象,你可以拦截并重定义对象的各种操作,比如读取属性、设置属性、删除属性等。通过使用 `Proxy`,你可以更灵活地控制和修改对象的行为。 以下是一个简单的使用 `Proxy` 的例子: ```javascript const obj = { name: 'John', }; const proxy = new Proxy(obj, { get(target, prop) { console.log(`获取属性 ${prop}`); return target[prop]; }, set(target, prop, value) { console.log(`设置属性 ${prop} 值为 ${value}`); target[prop] = value; }, }); console.log(proxy.name); // 输出: 获取属性 name proxy.age = 25; // 输出: 设置属性 age 值为 25 console.log(proxy.age); // 输出: 获取属性 age ``` 总结来说,`Object.defineProperty` 用于直接定义对象属性的特性,而 `Proxy` 则用于拦截并自定义对象操作的机制。`Object.defineProperty` 是静态的,而 `Proxy` 是动态的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值