1. 程式人生 > >Object.create(null) 和{}的區別

Object.create(null) 和{}的區別

一、js建立物件的方式

var obj = Object.create(null);
var obj1 = {}
var obj2 = new Object()

二、區別

建立的方法有如上的三種方法,那麼他們之間有什麼區別呢?

  1. 通過 Object.create(null) 建立的物件是不繼承Object原型鏈上的屬性,如tostring()方法這些
var obj = Object.create(null);
console.log(obj)

輸出如下:
執行結果

  1. 通過{}建立的物件和new Object()的方式是一樣的,都會繼承Object物件的所有屬性
var obj = {};
console.log(obj)

輸出如下:

三、為什麼用Object.create(null)

  1. 使用create建立的物件,沒有任何屬性,顯示No properties,我們可以把它當作一個非常純淨的map來使用,我們可以自己定義hasOwnProperty、toString方法,不管是有意還是不小心,我們完全不必擔心會將原型鏈上的同名方法覆蓋掉。
  2. 在我們使用for…in迴圈的時候會遍歷物件原型鏈上的屬性,使用create(null)就不必再對屬性進行檢查了,也可以使用Object.keys[]

四、什麼時候用Object.create(null)

  1. 你需要一個非常乾淨且高度可定製的物件當做資料字典的時候
  2. 減少hasOwnProperty造成的效能損失並且可以偷懶少些一點程式碼的時候
  3. 其他的時候,請用{}