delete 对 Object 效率低下,但对 DOM 元素的数据属性有效,与 null-out 相比?

delete inefficient on Object, but efficient on DOM Element's data attributes, compared to null-out?

众所周知,与将其设置为 null、[=14] 相比,delete 从 JavaScript Object 中读取字段在 V8 引擎中是一个缓慢的操作=] 或类似的值:http://jsperf.com/delete-vs-undefined-vs-null

但是,不同方法之间的性能差异似乎很小:http://jsperf.com/using-delete-on-dataset。它甚至比其他一些方法快一点。

是什么导致 "normal" 对象效率低下,为什么它对数据集属性没有任何影响?

对其属性表示为以固定偏移量存储的字段(如 C 结构、Java/C++ 对象等)的对象执行 delete 将使该对象使用散列 table 代表代替。哈希 table 使用字符串查找比简单地读取某个固定偏移量的内存要慢得多。

因此,如果对象已经使用散列 table 表示其属性,则执行删除不会影响性能。