返回限制在`lower`和`upper`之间的值

本文介绍了一个实用的函数,用于将数值限制在指定的上下限范围内。通过解析代码,我们了解到该函数如何处理各种输入,包括数字、符号和非数字类型,并确保返回的数值不会超出预设的边界。
/**
 * 返回限制在`lower`和`upper`之间的值
 * Clamps `number` within the inclusive `lower` and `upper` bounds.
 *
 * @param {number} number The number to clamp
 * @param {number} [lower] The lower bound
 * @param {number} upper The upper bound
 * @returns {number} Returns the clamped number.
 * @example
 *
 * clamp(-10, -5, 5)
 * // => -5
 *
 * clamp(10, -5, 5)
 * // => 5
 *
 */

const symbolTag = "[object Symbol]"
const NAN = 0 / 0
 
function isObjectLike(value) {
  return typeof value == "object" && value !== null
}
 
function isSymbol(value) {
  return (
    typeof value === "symbol" ||
    (isObjectLike(value) && Object.prototype.toString.call(value) === symbolTag)
  )
}
 
function toNumber(value) {
  if (typeof value === "number") {
    return value
  }
 
  if (isSymbol(value)) {
    return NAN
  }
 
  return Number(value)
}

function baseClamp(number, lower, upper) {
  if (number === number) {
    if (upper !== undefined) {
      number = number < upper ? number : upper
    }
    if (lower !== undefined) {
      number = number > lower ? number : lower
    }
  }
  return number
}

function clamp(number, lower, upper) {
  if (upper === undefined) {
    upper = lower
    lower = undefined
  }
  if (upper !== undefined) {
    upper = toNumber(upper)
    upper = upper === upper ? upper : 0
  }
  if (lower !== undefined) {
    lower = toNumber(lower)
    lower = lower === lower ? lower : 0
  }
  return baseClamp(toNumber(number), lower, upper)
}

export default clamp

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值