Use cases for Object.create(null)



我知道使用Object.create(null)会创建一个没有proto属性的对象(即 Object.getPrototypeOf( myObj ) === null ),但是有人可以帮助我了解这方面的一些用例吗?

换句话说,为什么要创建一个完全空的对象(即不继承Object.prototype的任何方法)?

在极少数情况下,某些内容可能已添加到Object.prototype

Object.prototype.bar = 'bar';
最好

创建一个带有Object.create(null)的对象,因为它不会继承这个,请考虑

({}).bar;                // bar
// vs
Object.create(null).bar; // undefined

这意味着您不必担心例如,如果您使用了for..in循环

此外,您可以使它无法通过instanceof测试

Object.create(null) instanceof Object; // false

这是因为instanceof基本上是在针对RHS测试原型链,并且没有这样的

您可以将此类对象用于键值映射。如果没有原型链,您可以确定对象上不会无意中存在.toString()之类的东西。这意味着您可以不谨慎地访问其上的属性,并且可以使用 in 运算符而不是 Object.prototype.hasOwnProperty.call

最新更新