我目前正在学习新的语言-- JavaScript中的ES6特性。
JavaScript对象一直是我从其他语言中知道的哈希映射或关联数组。
现在语言有了地图。但我问自己:是否真的有可能通过使用对象作为数据结构来完成同样的事情?
好吧.地图还有一些舒适的方法。尽管如此,我还没有找到一个用例,在这个用例中,不能通过使用一个对象来完成同样的任务。
有人知道为什么地图会被纳入语言吗?或者更好的是:有人能给我看一个用例,在这个用例中,我最好使用地图而不是对象?
发布于 2016-06-11 08:33:13
如果只使用字符串作为键,则可以使用对象。但是Maps将允许您使用其他数据类型作为密钥。此外,当您迭代它们的键和值时,它们有一个可预测的顺序(插入元素的顺序)。
发布于 2016-06-11 08:16:28
通常情况下,这一切都是为了一个更干净的数据结构,并使事情变得更容易。
下面是您可以使用Map所做的与使用普通对象所能做的比较
ECMAScript 6
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
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);
}
}发布于 2016-06-11 10:09:52
如果使用对象作为映射,则键可能与对象的内置属性发生冲突。当从用户或某些外部源读取密钥时,这可能是一个问题。
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);
}
}https://stackoverflow.com/questions/37761347
复制相似问题