将__proto__定义为null时,Object.create(null)是否与{}不同?

时间:2018-04-13 19:32:17

标签: javascript javascript-objects

似乎有一种在javascript中使用

创建裸对象的常用方法

Object.create(null)

创建没有任何预先存在的属性的对象。这与做

有什么不同
var obj = {}
obj.__proto__ = null

或它们功能相同吗?如果这样做的目的是将对象用作散列映射,那么在添加键值对后 proto 设置为null时,两者之间的性能或功能是否会发生任何变化?

1 个答案:

答案 0 :(得分:0)

是的,他们基本相同。

  

性能会有变化吗?

obj.__proto__结束时obj.__proto__ = ...

  

警告:根据现代JavaScript引擎如何在每个浏览器和JavaScript引擎中优化属性访问,非常慢的操作,改变对象的[[Prototype]]。改变继承对性能的影响是微妙和遥远的,并不仅仅局限于Object.create(null)语句中花费的时间,而是可以扩展到任何可以访问[[Prototype]]具有的任何对象的代码。被改变了。

所以你应该绝对使用{{1}} ...