我想验证给定数字是否在给定范围内:
function validate(min, max, amount) {
return (min <= amount <= max);
}
但这似乎无法正常工作。我知道我可以通过两个比较和一个逻辑 AND 来做到这一点,但我想在一个比较中做到这一点。是否有任何 NATIVE javascript 方式来实现这一点?
我想验证给定数字是否在给定范围内:
function validate(min, max, amount) {
return (min <= amount <= max);
}
但这似乎无法正常工作。我知道我可以通过两个比较和一个逻辑 AND 来做到这一点,但我想在一个比较中做到这一点。是否有任何 NATIVE javascript 方式来实现这一点?
改用这个:
return (min <= amount && amount <= max);
没有捷径可走。JavaScript 引擎无法猜测您的意图是有充分理由的:您输入的内容是有效的,只是没有按照您的意愿进行解释。事实上,你在测试
((min <= amount) <= max)
并且第一个比较的结果是一个布尔值,被转换为0
或1
用于第二个比较(这里有更多关于运算符优先级的详细信息,这些比较运算符是从左到右的)。
如果你真的想要一个捷径,你可以这样做:
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 错误,因为第一个参数已经是假的。
if(obj != null && obj.getValue() > 10) //C++,Java, etc.
if(obj !== undefined && obj.val() > 10) // javascript
if(obj.length != 0 && obj.val() > 10) //jQuery