Object.create(null) 和{}的區別
阿新 • • 發佈:2018-11-19
一、js建立物件的方式
var obj = Object.create(null);
var obj1 = {}
var obj2 = new Object()
二、區別
建立的方法有如上的三種方法,那麼他們之間有什麼區別呢?
- 通過 Object.create(null) 建立的物件是不繼承Object原型鏈上的屬性,如tostring()方法這些
var obj = Object.create(null);
console.log(obj)
輸出如下:
- 通過{}建立的物件和new Object()的方式是一樣的,都會繼承Object物件的所有屬性
var obj = {};
console.log(obj)
輸出如下:
三、為什麼用Object.create(null)
- 使用create建立的物件,沒有任何屬性,顯示No properties,我們可以把它當作一個非常純淨的map來使用,我們可以自己定義hasOwnProperty、toString方法,不管是有意還是不小心,我們完全不必擔心會將原型鏈上的同名方法覆蓋掉。
- 在我們使用for…in迴圈的時候會遍歷物件原型鏈上的屬性,使用create(null)就不必再對屬性進行檢查了,也可以使用Object.keys[]
四、什麼時候用Object.create(null)
- 你需要一個非常乾淨且高度可定製的物件當做資料字典的時候
- 減少hasOwnProperty造成的效能損失並且可以偷懶少些一點程式碼的時候
- 其他的時候,請用{}