删除对象效率低下,但与 null out相比,对 DOM 元素的数据属性有效?



众所周知,与将字段设置为nullundefined或类似值相比,从JavaScript Object中提取字段的delete在V8引擎中操作缓慢:http://jsperf.com/delete-vs-undefined-vs-null

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

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

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

因此,如果对象的属性已经使用哈希表表示,那么删除不会影响性能。

最新更新