Skip to content

Latest commit

 

History

History
52 lines (33 loc) · 2.1 KB

baseIndexOf.md

File metadata and controls

52 lines (33 loc) · 2.1 KB

lodash源码分析之baseIndexOf

他只是一个活着但不知道自己存在的人。

——卡尔维诺《不存在的骑士》

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

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

依赖

import baseFindIndex from './baseFindIndex.js'
import baseIsNaN from './baseIsNaN.js'
import strictIndexOf from './strictIndexOf.js'

《lodash源码分析之baseFindIndex中的运算符优先级》

《lodash源码分析之NaN不是NaN》

《lodash源码分析之strictIndexOf 》

源码分析

function baseIndexOf(array, value, fromIndex) {
  return value === value
    ? strictIndexOf(array, value, fromIndex)
    : baseFindIndex(array, baseIsNaN, fromIndex)
}

baseIndexOf 跟数组的 indexOf 方法有两处差别:

  1. 不处理 fromIndex 为负数时的情况
  2. 可以查找 NaN

这个函数是 lodash 的内部函数,将会给 indexOf 函数调用,fromIndex 为负数的情况将会有 indexOf 函数来处理,后续的文章会分析到。

数组的 indexOf 方法,遵循的是 Strict Equality Comparison 的比较方式,因此在查找 NaN 时,返回的都是 -1 。但是 baseIndexOf 会处理 NaN

在三元表达式中, value === value 的结果为 false 时,则该值是 NaN,调用 baseFindIndex 函数来查找索引,使用 baseIsNaN 函数来作为 baseFindIndex 的比较函数。

License

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

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

作者:对角另一面