首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在哪种情况下,我应该更喜欢ES6映射而不是JavaScript对象?

在哪种情况下,我应该更喜欢ES6映射而不是JavaScript对象?
EN

Stack Overflow用户
提问于 2016-06-11 07:56:42
回答 3查看 132关注 0票数 2

我目前正在学习新的语言-- JavaScript中的ES6特性。

JavaScript对象一直是我从其他语言中知道的哈希映射或关联数组。

现在语言有了地图。但我问自己:是否真的有可能通过使用对象作为数据结构来完成同样的事情?

好吧.地图还有一些舒适的方法。尽管如此,我还没有找到一个用例,在这个用例中,不能通过使用一个对象来完成同样的任务。

有人知道为什么地图会被纳入语言吗?或者更好的是:有人能给我看一个用例,在这个用例中,我最好使用地图而不是对象?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-11 08:33:13

如果只使用字符串作为键,则可以使用对象。但是Maps将允许您使用其他数据类型作为密钥。此外,当您迭代它们的键和值时,它们有一个可预测的顺序(插入元素的顺序)。

有关更多信息,请在这里查看MDN。

票数 2
EN

Stack Overflow用户

发布于 2016-06-11 08:16:28

通常情况下,这一切都是为了一个更干净的数据结构,并使事情变得更容易。

下面是您可以使用Map所做的与使用普通对象所能做的比较

ECMAScript 6

代码语言:javascript
复制
let s = new Set()
s.add("hello").add("goodbye")

let m = new Map()
m.set("hello", 42)
m.set(s, 34)
m.get(s) === 34
m.size === 2
for (let [ key, val ] of m.entries())
    console.log(key + " = " + val) 

ECMAScript 5

代码语言:javascript
复制
var s = {}; 
s["hello"] = true; s["goodbye"] = true;

var m = {};
m["hello"] = 42; 
// no equivalent in ES5 
// no equivalent in ES5
Object.keys(m).length === 2;
for (key in m) {
    if (m.hasOwnProperty(key)) {
        var val = m[key];
        console.log(key + " = " + val);
    }
}
票数 1
EN

Stack Overflow用户

发布于 2016-06-11 10:09:52

如果使用对象作为映射,则键可能与对象的内置属性发生冲突。当从用户或某些外部源读取密钥时,这可能是一个问题。

代码语言:javascript
复制
var a = {};

// Put value in map
a['hasOwnProperty'] = 1;

for(x in a) {
    // TypeError: a.hasOwnProperty is not a function
    if(a.hasOwnProperty(x)) {
        console.log(x);
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37761347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档