Skip to content

Latest commit

 

History

History
73 lines (50 loc) · 2.2 KB

clamp.md

File metadata and controls

73 lines (50 loc) · 2.2 KB

lodash源码分析之clamp

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

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

源码分析

clamp 可以传入一个 number ,并且可以设定下限 lower 和上限 upper,如果 number 在上限和下限之前,则返回 number,如果低于下限,则返回下限值,如果高于上限,则返回上限值。

源码如下:

function clamp(number, lower, upper) {
  number = +number
  lower = +lower
  upper = +upper
  lower = lower === lower ? lower : 0
  upper = upper === upper ? upper : 0
  if (number === number) {
    number = number <= upper ? number : upper
    number = number >= lower ? number : lower
  }
  return number
}

转换成数字

number = +number
lower = +lower
upper = +upper

先将 numberlowerupper 都转换成数字类型,方便后续比较。

处理NaN

lower = lower === lower ? lower : 0
upper = upper === upper ? upper : 0
if (number === number) {
  ...
}
return number

如果 lower === lowerfalse,即 lowerNaN 时,将 lower 设置为 0upper 的处理同理。

如果 number === numberfalse ,即 numberNaN 时,因为 NaN 无法比较大小,也直接返回 NaN

比较

number = number <= upper ? number : upper
number = number >= lower ? number : lower

先将 number 和上限比较,如果大于上限,则将 number 设置为上限。

此时 number 相当于上限了,再将 number 和下限比较,如果比下限小,将 number 设置为下限。

最后是将 number 返回。

License

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

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

作者:对角另一面