若是你僅僅是想要用對象保存數據,請用Object.create(null),而不是對象字面量

當你想用javascript對象做爲一個hash映射(徹底用來儲存數據),你應該按以下方式來建立它。
const map = Object.create(null);
當建立一個映射使用對象字面量時(const map = {}),默認狀況下,這個映射從這個對象繼承屬性。這和 Object.creatd(Object.prototype)建立時相等的。

可是經過 Object.create(null),咱們明確指定 null 做爲它的屬性。所以它至關於沒有屬相,甚至沒有constructor, toString, hasOwnProperty等方法。所以你能夠隨意使用這些鍵值在你的數據結構中,只要你須要。javascript

const dirtyMap = {};
const cleanMap = Object.create(null);

dirtyMap.constructor    // function Object() { [native code] }

cleanMap.constructor    // undefined

// Iterating maps

const key;
for(key in dirtyMap){
  if (dirtyMap.hasOwnProperty(key)) {   // Check to avoid iterating over inherited properties.
    console.log(key + " -> " + dirtyMap[key]);
  }
}

for(key in cleanMap){
  console.log(key + " -> " + cleanMap[key]);    // No need to add extra checks, as the object will always be clean
}

標註:若是你僅僅是想要用對象保存數據,建議這種方式:java

const map = Object.create(null)
相關文章
相關標籤/搜索