众所周知,与将字段设置为null
、undefined
或类似值相比,从JavaScript Object
中提取字段的delete
在V8引擎中操作缓慢:http://jsperf.com/delete-vs-undefined-vs-null
然而,不同方法之间的性能差异似乎很小:http://jsperf.com/using-delete-on-dataset.它甚至比其他一些方法稍微快一点。
是什么导致了"普通"对象的效率低下,为什么它对数据集属性没有任何影响?
对属性表示为以固定偏移量存储的字段的对象(如C struct、Java/C++对象等)执行delete
将使该对象使用哈希表表示。使用字符串查找哈希表比简单地以某个固定偏移量读取内存要慢得多。
因此,如果对象的属性已经使用哈希表表示,那么删除不会影响性能。