Javascript 检查值是否在某个范围内并将其设置为';如果超出范围,则为s值?

Javascript 检查值是否在某个范围内并将其设置为';如果超出范围,则为s值?,javascript,coding-style,Javascript,Coding Style,我想做的事情本身就很简单,但我想知道是否有一些真正简洁的方法来完成同样的事情 我有一个浮点变量,我想检查它的值是否在0和1之间。如果它小于0,我想把它设为0,如果它大于1,我想把它设为1 通常我会这样做: // var myVar is set before by some calculation if(myVar > 1){ myVar = 1; } if(myVar < 0){ myVar = 0; } //var myVar是通过某种计算设置的 如果(my

我想做的事情本身就很简单,但我想知道是否有一些真正简洁的方法来完成同样的事情

我有一个浮点变量,我想检查它的值是否在0和1之间。如果它小于0,我想把它设为0,如果它大于1,我想把它设为1

通常我会这样做:

// var myVar is set before by some calculation

if(myVar > 1){
    myVar = 1;
}
if(myVar < 0){ 
    myVar = 0;
}
//var myVar是通过某种计算设置的
如果(myVar>1){
myVar=1;
}
如果(myVar<0){
myVar=0;
}

有人知道更优雅/简洁的方法吗?

使用Math.min和Math.max,避免出现条件

var MAX = 100;
var MIN = 50;

var val = 75;
console.log( Math.max(MIN, Math.min(MAX, val)) );

var val = 49;
console.log( Math.max(MIN, Math.min(MAX, val)) );

var val = 101;
console.log( Math.max(MIN, Math.min(MAX, val)) );

这是一个可以非常容易地扩展的选项,可以测试比简单的最小值/最大值更多的值:

myVar = parseFloat( (myVar < 0 && '0') || (myVar > 1 && 1) || myVar );
myVar=parseFloat((myVar<0&&0')||(myVar>1&&1)|| myVar);
parseFloat
和将0作为字符串返回是很重要的,否则它会在停止时通过该条件。

一种可能的解决方案:

myVar = Math.min(1, Math.max(0, myVar));
另一个:

myVar = myVar < 0 ? 0 : myVar > 1 ? 1 : myVar;
myVar=myVar<0?0:myVar>1?1:myVar;
可能是这样的:

 myVal = myVal >= 1 ? 1 : Math.min(Math.abs(myVal), 0)

虽然Min/Max解决方案非常简洁,但所发生的事情还很不明显

我会选择一个功能,它可以实现您所拥有的功能:

myVar = constrainToRange(myVar, 0, 1);

function constrainToRange(x, min, max) {
    if (x < min) {
        x = min;
    }
    else if( x > max) {
        x = max;
    }
    return x;
}
myVar=constraintorrange(myVar,0,1);
函数约束范围(x、最小值、最大值){
如果(x最大值),则为else{
x=最大值;
}
返回x;
}

如果您使用三元,至少用括号括起else条件-一行中的多个三元会非常混乱,非常快Math.min Math.max解决方案很好,我想我会使用它!我会在10分钟内接受。+1很难击败这个解决方案的清晰度。我刚想说“约束”,但你抢先了我一步您甚至可以将此添加到
Number.prototype
作为选项。代码太多了
Number.prototype.constraint=function(x,min,max){if(xmax)return max;return x;}
我选择了这一个,再加上用户1689607的建议,这为我的问题提供了一个非常清晰明了的解决方案。@mplungjan如果你要跨多行写出它,你会得到完全相同数量的代码,因为我总是使用大括号。如果杰罗恩喜欢另一种风格,欢迎他改编。我省略了其他内容和括号:)