【Js-Javascript】 关于hasOwnProperty和IndexOf的性能对比

本文通过实验对比了JavaScript中hasOwnProperty和indexOf方法在查找数组元素时的性能表现,发现hasOwnProperty方法明显优于indexOf,前者的时间复杂度接近常数级,而后者则为线性级。

【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)。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值