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源码分析之toFinite #54

Open
HeftyKoo opened this issue Dec 17, 2019 · 2 comments
Open

lodash源码分析之toFinite #54

HeftyKoo opened this issue Dec 17, 2019 · 2 comments
Labels
api 暴露出来的接口 系列文章

Comments

@HeftyKoo
Copy link
Owner

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

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

依赖

import toNumber from './toNumber.js'

《lodash源码分析之toNumber》

源码分析

从方法名上看,toFinite 的作用大体有两个:

  1. value 转换成 number 类型
  2. 返回有限值

看看源码:

function toFinite(value) {
  if (!value) {
    return value === 0 ? value : 0
  }
  value = toNumber(value)
  if (value === INFINITY || value === -INFINITY) {
    const sign = (value < 0 ? -1 : 1)
    return sign * MAX_INTEGER
  }
  return value === value ? value : 0
}

判断是否为falsely

if (!value) {
  return value === 0 ? value : 0
}

falsely 的值全部转换成 0

转换成number

value = toNumber(value)

只需要调用 toNumber 就可以将 value 转换成 number 类型了。

处理无限值

if (value === INFINITY || value === -INFINITY) {
  const sign = (value < 0 ? -1 : 1)
  return sign * MAX_INTEGER
}

如果转换后的值为正无限值或者负无限值,则将其转换成 js 所能表达的最大的正负值。

处理NaN

value === value ? value : 0

js 中,NaNNaN 是不相等的,所以可以用这个来判断一个值是否为 NaN ,如果值为 NaN ,则返回 0

License

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

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

作者:对角另一面

@Yh1404
Copy link

Yh1404 commented Jul 13, 2021

为什么第一个if不直接return 0而要判断一次再返回呢

@HeftyKoo
Copy link
Owner Author

为什么第一个if不直接return 0而要判断一次再返回呢

我猜是处理正负0的问题,如果是 -0,按原样返回 -0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
api 暴露出来的接口 系列文章
Projects
None yet
Development

No branches or pull requests

2 participants