diff --git a/.internal/baseClamp.js b/.internal/baseClamp.js deleted file mode 100644 index f6e7e7ded..000000000 --- a/.internal/baseClamp.js +++ /dev/null @@ -1,18 +0,0 @@ -/** - * The base implementation of `clamp` which doesn't coerce arguments. - * - * @private - * @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. - */ -function baseClamp(number, lower, upper) { - if (number === number) { - number = number <= upper ? number : upper - number = number >= lower ? number : lower - } - return number -} - -export default baseClamp diff --git a/clamp.js b/clamp.js index 0f40c0e4c..bb7075d69 100644 --- a/clamp.js +++ b/clamp.js @@ -1,4 +1,3 @@ -import baseClamp from './.internal/baseClamp.js' import toNumber from './toNumber.js' /** @@ -19,13 +18,17 @@ import toNumber from './toNumber.js' * // => 5 */ function clamp(number, lower, upper) { + number = toNumber(number) lower = toNumber(lower) - lower = lower === lower ? lower : 0 - upper = toNumber(upper) - upper = upper === upper ? upper : 0 - return baseClamp(toNumber(number), lower, 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 } export default clamp diff --git a/endsWith.js b/endsWith.js index 3482d9c29..60736f478 100644 --- a/endsWith.js +++ b/endsWith.js @@ -1,4 +1,3 @@ -import baseClamp from './.internal/baseClamp.js' import baseToString from './.internal/baseToString.js' import toInteger from './toInteger.js' import toString from './toString.js' @@ -29,11 +28,14 @@ function endsWith(string, target, position) { string = toString(string) target = baseToString(target) - const length = string.length - position = position === undefined - ? length - : baseClamp(toInteger(position), 0, length) - + const { length } = string + position = position === undefined ? length : toInteger(position) + if (position < 0) { + position = 0 + } + else if (position > length) { + position = length + } const end = position position -= target.length return position >= 0 && string.slice(position, end) == target diff --git a/startsWith.js b/startsWith.js index e6f6067e5..5174c2202 100644 --- a/startsWith.js +++ b/startsWith.js @@ -1,4 +1,3 @@ -import baseClamp from './.internal/baseClamp.js' import baseToString from './.internal/baseToString.js' import toInteger from './toInteger.js' import toString from './toString.js' @@ -27,10 +26,15 @@ import toString from './toString.js' */ function startsWith(string, target, position) { string = toString(string) - position = position == null - ? 0 - : baseClamp(toInteger(position), 0, string.length) + const { length } = string + position = position == null ? 0 : toInteger(position) + if (position < 0) { + position = 0 + } + else if (position > length) { + position = length + } target = baseToString(target) return string.slice(position, position + target.length) == target } diff --git a/toLength.js b/toLength.js index fbd9fdab8..4425c1075 100644 --- a/toLength.js +++ b/toLength.js @@ -1,4 +1,3 @@ -import baseClamp from './.internal/baseClamp.js' import toInteger from './toInteger.js' /** Used as references for the maximum length and index of an array. */ @@ -30,7 +29,17 @@ const MAX_ARRAY_LENGTH = 4294967295 * // => 3 */ function toLength(value) { - return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0 + if (!value) { + return 0 + } + value = toInteger(value) + if (value < 0) { + return 0 + } + if (value > MAX_ARRAY_LENGTH) { + return MAX_ARRAY_LENGTH + } + return value } export default toLength diff --git a/toSafeInteger.js b/toSafeInteger.js index 6242cc7c7..2cf3ee94d 100644 --- a/toSafeInteger.js +++ b/toSafeInteger.js @@ -1,4 +1,3 @@ -import baseClamp from './.internal/baseClamp.js' import toInteger from './toInteger.js' /** Used as references for various `Number` constants. */ @@ -27,9 +26,17 @@ const MAX_SAFE_INTEGER = 9007199254740991 * // => 3 */ function toSafeInteger(value) { + if (!value) { + return value === 0 ? value : 0 + } + value = toInteger(value) + if (value < -MAX_SAFE_INTEGER) { + return -MAX_SAFE_INTEGER + } + if (value > MAX_SAFE_INTEGER) { + return MAX_SAFE_INTEGER + } return value - ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) - : (value === 0 ? value : 0) } export default toSafeInteger