javascript - Object.create(null) 的用例?

标签 javascript null prototype

如果您使用 var obj = {}; 创建一个常规的 javascript 对象,它将具有对象原型(prototype)。使用 var obj = new MyClass(); 创建的对象也是如此 在引入 Object.create 之前,没有办法解决这个问题。然而,现在可以使用 var obj = Object.create(null); 创建一个没有原型(prototype)的对象(相应的 null 作为其原型(prototype))。

为什么这很重要?它带来了哪些优势?有任何现实世界的用例吗?

最佳答案

它是一个完全空的对象(没有从任何 .prototype 继承,包括 Object.prototype),所以你可以保证任何属性查找只有在属性被显式添加到对象中。

例如,如果您想在事先不知道 key 的地方存储一些数据,则提供的 key 可能与 Object.prototype 的成员同名, 并导致错误。

在这些情况下,您需要执行显式 .hasOwnProperty() 检查以排除意外的继承值。但是如果没有任何继承,您的测试可以简化为 if (key in my_object) { 测试,或者可能是一个简单的真实测试 if (my_object[key]) {如果合适的话。

此外,如果没有原型(prototype)链,我想查找结果不存在的属性会更快,因为只需要检查直接对象。这在现实中是否成功(由于优化)将通过性能测试来确定。

关于javascript - Object.create(null) 的用例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26961544/

相关文章:

java - 我应该将初始 java String 值从 null 设置为 ""吗?

c# - 你调用的对象是空的

ruby-on-rails - :default => 0 and :null => false differ for integer fields in migrations? 怎么办

javascript - 原型(prototype)方法能做什么 es6 类不能做什么?

javascript - 在 Javascript 中向 Object.prototype 添加方法有哪些好处和危险?

javascript - 在html表格中显示javascript数组

Javascript:在没有长度属性和切片的情况下获取字符串的长度

javascript - 在 css 中选定的开始日期和结束日期之间的悬停效果

javascript原型(prototype)方法assign VS underscore _.extend

php - 为什么页面在没有完成表单的情况下重定向到“one in action”属性?