目前了解到的区别有
- Object的键只能是字符串或者Symbol,Map的键值可以是任意值
- Map的键值对数量可以通过size属性获取,Object则需要通过Object.keys(obj).length类似的方式获取
以上两点已经过证实,
但还看到其他的
- Map的键值是有序的,而对象不是
- Object有自己的原型,原型链上的键名可能与对象的键名产生冲突。
想问下这两点该怎么证实。求助各位大佬
目前了解到的区别有
以上两点已经过证实,
但还看到其他的
想问下这两点该怎么证实。求助各位大佬
主要体现在key值为数字字符串时,object会自动排序 ,
比如
{
'1': 'a',
'3': 'c',
'2': 'b'
}
会被自动调整为
{
'1':'a',
'2':'b',
'3':'c'
}
可以遍历一遍打印 , 很容易看到结果,
而map不会,原来定义是什么顺序就是什么顺序
new Map(
[
['1','a'],
['3','c'],
['2','b'],
]
)
"Map的键值是有序的,而对象不是" ???
印象中记得对象的属性是无序的,直到看到React代码里提到:Issue 4118: Object.getOwnPropertyNames returns names in wrong order。
Symbol
型属性名也是按照插入顺序排列;Symbol
型。var a = {
b: 2,
a: 1,
[Symbol('name')]: 'join',
[Symbol('age')]: 12,
1: 1,
2: 2,
1.1: 4,
name: 'join',
age: '20'
};
// ["1", "2", "b", "a", "1.1", "name", "age"]
console.log(Object.getOwnPropertyNames(a)); // Object.keys,for-in
// [Symbol(name), Symbol(age)]
console.log(Object.getOwnPropertySymbols(a));
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
有序的问题……反正两个遍历结果是一样的,没见排序
原型的问题,截个图给你吧
再来张图
图中的代码