Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

lodash源码分析之baseIndexOf #13

Open
HeftyKoo opened this issue Feb 24, 2018 · 0 comments
Open

lodash源码分析之baseIndexOf #13

HeftyKoo opened this issue Feb 24, 2018 · 0 comments
Labels
internal 内部函数或方法 系列文章

Comments

@HeftyKoo
Copy link
Owner

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

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

本文为读 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)

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

作者:对角另一面

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
internal 内部函数或方法 系列文章
Projects
None yet
Development

No branches or pull requests

1 participant