我想验证一个给定的数字是一个给定的范围内:Javascript(-1 <= 5 <= 1)=== true?
function validate(min, max, amount) {
return (min <= amount <= max);
}
但是,这似乎并没有正常工作。我知道我可以用两个比较和一个逻辑与来做到这一点,但我希望通过一个比较。有没有任何NATIVE JavaScript的方式来实现这一点?
我想验证一个给定的数字是一个给定的范围内:Javascript(-1 <= 5 <= 1)=== true?
function validate(min, max, amount) {
return (min <= amount <= max);
}
但是,这似乎并没有正常工作。我知道我可以用两个比较和一个逻辑与来做到这一点,但我希望通过一个比较。有没有任何NATIVE JavaScript的方式来实现这一点?
使用这个代替:
return (min <= amount && amount <= max);
没有捷径。 JavaScript引擎无法猜测你的意图是有原因的:你输入的内容是有效的,它只是不被你理解。你正在测试,事实上
((min <= amount) <= max)
和所述第一比较,这是一个布尔值的结果,被转换为0
或1
为第二个(more details here about operators precedence,这些比较运算符是左到右)。
如果你真的想一个快捷方式,你可以这样做:
Number.prototype.isin = function(m,M) {
return m<=this && this<=M;
};
console.log(0.5.isin(1,2)); // logs false
console.log(3..isin(2,5)); // logs true
但我个人会使用标准的解决方案与&&
,每个人都可以阅读,并且不涉及额外的函数调用。
另外:我可以调用我的功能in
而不是isin
,但它可能会打破ES3浏览器。
运算符(==,< =,<,> =,==)只接受2个参数。
当有更多的参数时,它使用计算的数学顺序。所以其实你的代码的行为,如:
min <= amount // true
true <= max // this is illogical
这也是最佳,执行逻辑语句,并找到类似时,因为:
if(false && (some computing))
,而忽略(some computing)
,因为结果将是永远false
这在每种语言中都非常普遍。像这样的测试不会有NullPointerException错误,因为第一个参数已经是false。
if(obj != null && obj.getValue() > 10) //C++,Java, etc.
if(obj !== undefined && obj.val() > 10) // javascript
if(obj.length != 0 && obj.val() > 10) //jQuery
不能相信这不是欺骗,但我能找到最接近的是[JavaScript的三重平等和三变量比较(http://stackoverflow.com/q/15331947/1048572) – Bergi