Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
332 views
in Technique[技术] by (71.8m points)

Map与Object的区别是什么

目前了解到的区别有

  • Object的键只能是字符串或者Symbol,Map的键值可以是任意值
  • Map的键值对数量可以通过size属性获取,Object则需要通过Object.keys(obj).length类似的方式获取

以上两点已经过证实,
但还看到其他的

  • Map的键值是有序的,而对象不是
  • Object有自己的原型,原型链上的键名可能与对象的键名产生冲突。

想问下这两点该怎么证实。求助各位大佬


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

有序的问题……反正两个遍历结果是一样的,没见排序

const entries = [
    ["def", 1],
    ["abc", 2],
    ["cfg", 3]
]

Array.from(new Map(entries))
    .forEach(([key, value]) => console.log(`${key} = ${value}`));

console.log("-----------------------------");

Object
    .entries(entries.reduce((o, [key, value]) => {
        o[key] = value;
        return o;
    }, {}))
    .forEach(([key, value]) => console.log(`${key} = ${value}`));

原型的问题,截个图给你吧

image.png

再来张图

image.png

图中的代码

console.log("------------------------------------");
const oMap = {
    toString: "hello"
};

const mMap = new Map([["toString", "hello"]]);


console.log(`mMap.toString = ${mMap.get("toString")}`);
console.log("mMap.toString()", mMap.toString());
console.log(`oMap.toString = ${oMap["toString"]}`);
console.log("oMap.toString()", oMap.toString());

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...