js对象的hasOwnProperty为什么比数组的indexof方法在性能上高的多

JavaScript016

js对象的hasOwnProperty为什么比数组的indexof方法在性能上高的多,第1张

indexOf:是数组的元素存在性检查方法。需要遍历所有元素来检查,此方法的时间复杂度是O(n)。

hasOwnProperty:是对象的属性(名称)存在性检查方法。对象的属性可以基于Hash表实现,因此对属性进行访问的时间复杂度可以达到O(1)。

所以很明显,后者可以远快于前者。

这个问题是好问题。能问这个说明JS是入门了。

首先JS的数组和C语言的数组是不一样的。C的数组是连续内存存储,通过指针或这下标可以直接定位数组中的元素。而JS的实现要复杂一些。

JS中,数组的内部实现有点不一样,如果数组使用的过程中,所有的元素都是同样的结构,那么会尽可能按照C语言的方法去实现,但是一点添加一个异类的元素,JS解释器会立刻重构这个数组,采用哈希表。你可以认为大多数情况下,都是用哈希表的。哈希表不光要算哈希值,而且如果数组特别大的情况,还要有复杂度为O(n)的链表遍历。很亏。最后,JS的数组的索引看起来是个数字,但是实际上在实现的时候,会被内部转换为字符串……