Object.create(null) 和 {} 區別是什麼

寒風之外發表於2018-09-18

最近在看vue的原始碼,發現裡面定義一個空物件都是使用Object.create(null) 而不是使用{},帶著這個疑問翻看了一下《JavaScript權威指南》。學習一下物件的申明方式,特在這裡做記錄和總結。

建立物件的三種方式

  • 物件直接量

var empty = {};var point = {x:0,y:0}複製程式碼

特點:物件直接量是一個表示式,這個表示式的每次運算都建立並初始化一個新的物件。每次計算物件直接量的時候,也都會計算他的每個屬性的值。如果在一個重複呼叫的函式中的迴圈體內使用了物件直接量,他將建立很多新物件,並且每次建立的屬性值有可能不同.

  • 通過new建立物件

var o = new Object();複製程式碼

  • Object.create()

它建立了一個新物件,第一引數是這個物件的原型,第二個引數(可選),用以對物件屬性做進一步描述.

Object.create()是一個靜態函式,而不是提供給某個物件呼叫的方法.

var o1 = Object.create({x:0,y:0});// o1繼承屬性x和y複製程式碼

可以通過傳入null定義一個沒有原型的新物件,通過這種方法不會繼承任何東西,包括toString()等方法.這樣建立的空物件在使用它的屬性的時候不需要進行hasOwnProperty判斷,減少效能損耗.


相關文章