Object.create(null) 和 {} 区别是什么

250 阅读1分钟

最近在看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判断,减少性能损耗.