在地图上使用 Object.create(null) 有什么好处吗?
Is there any advantage to using Object.create(null) over a Map?
我看到人们使用的代码看起来像
const STUFF_MAP = Object.create(null);
STUFF_MAP
想建议只像地图一样使用,所以我明白为什么使用 Object.create(null)
比 {}
更好(删除可能导致冲突的属性等),但是不只是使用
有什么好处吗
const STUFF_MAP = new Map();
我什么时候用每一个?是否与编译为 pre es6 有关?
Does it have to do with being compiled to pre es6?
是的,Object.create(null)
是 ES5,如果您需要支持旧浏览器,则不需要 Map
的 polyfill。
除此之外,您应该更喜欢更现代的 Map
,它也清楚地表明了变量的用途。您将需要使用 has
/get
/set
方法访问该集合,而不是 in
operator/bracket syntax/assignment。这有时会导致代码不那么简洁,例如对于 incrementing a value,您不能使用复合赋值运算符。
至于性能,应该差别不大;如果您关心,请针对您的特定情况做一个基准。
我看到人们使用的代码看起来像
const STUFF_MAP = Object.create(null);
STUFF_MAP
想建议只像地图一样使用,所以我明白为什么使用 Object.create(null)
比 {}
更好(删除可能导致冲突的属性等),但是不只是使用
const STUFF_MAP = new Map();
我什么时候用每一个?是否与编译为 pre es6 有关?
Does it have to do with being compiled to pre es6?
是的,Object.create(null)
是 ES5,如果您需要支持旧浏览器,则不需要 Map
的 polyfill。
除此之外,您应该更喜欢更现代的 Map
,它也清楚地表明了变量的用途。您将需要使用 has
/get
/set
方法访问该集合,而不是 in
operator/bracket syntax/assignment。这有时会导致代码不那么简洁,例如对于 incrementing a value,您不能使用复合赋值运算符。
至于性能,应该差别不大;如果您关心,请针对您的特定情况做一个基准。