esnext.math.clamp.js 687 B

123456789101112131415161718192021
  1. 'use strict';
  2. var $ = require('../internals/export');
  3. var aNumber = require('../internals/a-number');
  4. var notANaN = require('../internals/not-a-nan');
  5. var sameValue = require('../internals/same-value');
  6. var $RangeError = RangeError;
  7. var $min = Math.min;
  8. var $max = Math.max;
  9. // `Math.clamp` method
  10. // https://github.com/tc39/proposal-math-clamp
  11. $({ target: 'Math', stat: true, forced: true }, {
  12. clamp: function clamp(value, min, max) {
  13. aNumber(value);
  14. notANaN(aNumber(min));
  15. notANaN(aNumber(max));
  16. if ((sameValue(min, 0) && sameValue(max, -0)) || min > max) throw new $RangeError('`min` should be smaller than `max`');
  17. return $min(max, $max(min, value));
  18. }
  19. });