Skip to content

Latest commit

 

History

History
53 lines (36 loc) · 2.18 KB

strictIndexOf.md

File metadata and controls

53 lines (36 loc) · 2.18 KB

lodash源码分析之strictIndexOf

你是否

偶尔也会低下头

望望那些从你道德的筛网中

不经意漏下去的良知

——79秒《网罟座·良知》

本文为读 lodash 源码的第十一篇,后续文章会更新到这个仓库中,欢迎 star:pocket-lodash

gitbook也会同步仓库的更新,gitbook地址:pocket-lodash

源码分析

如果看过 indexOf 的规范,就会知道,数组原生方法 indexOf 采用的是 Strict Equality Comparison 的比较方式。

strictIndexOf 采用的比较方式与 indexOf 的一致,但是这个方法是 lodash 的内部方法,会在多个地方复用,在这里没有像 indexOf 一样处理 fromIndex 为负数的情况。

后面的文章将会介绍到,lodash 也实现了一个 indexOf 的函数,这个函数采用的是 SameValueZero 的比较方式。而 strictIndexOf 是实现 indexOf 函数的基础。

关于这两种比较方式的差异,在前面的文章 lodash源码分析之NaN不是NaN 中也有的提及。

好了,接下来看源码吧:

function strictIndexOf(array, value, fromIndex) {
  let index = fromIndex - 1
  const { length } = array

  while (++index < length) {
    if (array[index] === value) {
      return index
    }
  }
  return -1
}

首先,将 fromIndex 减少 1,这是为了抵消初始进入循环体时,就自增的影响。

接着就很简单了,比较数组中每个位置的值是否与 value 严格相等(===),如果严格相等,则返回对应的索引值,否则返回 -1

License

署名-非商业性使用-禁止演绎 4.0 国际 (CC BY-NC-ND 4.0)

最后,所有文章都会同步发送到微信公众号上,欢迎关注,欢迎提意见:

作者:对角另一面