Skip to content

Latest commit

 

History

History
81 lines (55 loc) · 1.98 KB

toFinite.md

File metadata and controls

81 lines (55 loc) · 1.98 KB

lodash源码分析之toFinite

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

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

作者:对角另一面