【Js-Javascript】 关于hasOwnProperty和IndexOf的性能对比
(ps:不要吐槽我的标题,js-JavaScript 只是为了方便搜索而已,如果你能看到这篇文章,那么它的作用就体现了,:) )
今天做了一个小测试(测试环境node),测试了js的hasOwnProperty和indexOf的性能对比。先来看一下简单的测试demo
let arr = [];
for(let i = 1;i <= 1000000;i++) {
arr[i] = i;
}
console.time("indexOf");
arr.indexOf(1000000)
console.timeEnd("indexOf");
console.time('hasOwnProperty')
arr.hasOwnProperty(1000000)
console.timeEnd('hasOwnProperty')
给一个数组赋值了1000k个数,获取最后一个数的下标,查看消耗的时间
打印结果:
indexOf: 1.252ms
hasOwnProperty: 0.008ms
indexOf的时间不是很稳定,有时候会飙到2ms多(这大概和机器的执行环境有关),但是对比起来,和hasOwnProperty就相差很大了,hasOwnProperty直接是微秒级别。
到底为什么会有这么大的差异。emmm,首先看一下indexOf和hasProperty的原理。
indexOf做的事情就是遍历整个数组,找到需要访问的数的位置,然后返回它的下标,这种情况下时间复杂度可以达到O(n)。
而hasOwnProperty就不同了,数组可以看作是一个键值对,键是数组的下标,值是对应下标的值,这样的话就很容易做hash,时间复杂度可以达到n(1)。