clamp.js

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;