hasOwnProperty:是对象的属性(名称)存在性检查方法。对象的属性可以基于Hash表实现,因此对属性进行访问的时间复杂度可以达到O(1)。
所以很明显,后者可以远快于前者。
这个问题是好问题。能问这个说明JS是入门了。首先JS的数组和C语言的数组是不一样的。C的数组是连续内存存储,通过指针或这下标可以直接定位数组中的元素。而JS的实现要复杂一些。
JS中,数组的内部实现有点不一样,如果数组使用的过程中,所有的元素都是同样的结构,那么会尽可能按照C语言的方法去实现,但是一点添加一个异类的元素,JS解释器会立刻重构这个数组,采用哈希表。你可以认为大多数情况下,都是用哈希表的。哈希表不光要算哈希值,而且如果数组特别大的情况,还要有复杂度为O(n)的链表遍历。很亏。最后,JS的数组的索引看起来是个数字,但是实际上在实现的时候,会被内部转换为字符串……