當你想用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)