import defaultTo from './defaultTo';
import { nativeUndefined } from './internals/native';
import toNumber from './toNumber';
/**
* 数字限制在 `lower` 和 `upper` 之间的值。
*
* @function
* @alias module:Number.clamp
* @since 1.0.0
* @param {number} number 被限制的值。
* @param {number} [lower] 下限。默认 `0`。
* @param {number} upper 上限。默认 `0`。
* @returns {number} 限制后的值。
* @example
*
* clamp(-10, -5, 5); // -5
*
* clamp(-10, 0, 5); // 0
*
* clamp(10, -5, 5); // 5
*
* // 仅限制上限
* clamp(10, 5); // 5
*
* clamp(-10, 5); // -10
*
*/
const clamp = function (number, lower, upper) {
if (upper === nativeUndefined) {
upper = lower;
lower = nativeUndefined;
}
if (upper !== nativeUndefined) {
upper = defaultTo(toNumber(upper), 0);
}
if (lower !== nativeUndefined) {
lower = defaultTo(toNumber(lower), 0);
}
number = toNumber(number);
if (number === number) {
if (upper !== nativeUndefined) {
number = number <= upper ? number : upper;
}
if (lower !== nativeUndefined) {
number = number >= lower ? number : lower;
}
}
return number;
};
export default clamp;