我想验证给定的数字是否在给定范围内:
function validate(min, max, amount) {
return (min <= amount <= max);
}
但是这似乎不能正常工作。我知道可以用两个比较和逻辑与来实现,但我想用一个比较来实现。是否有任何原生的JavaScript方法来实现这一点?
我想验证给定的数字是否在给定范围内:
function validate(min, max, amount) {
return (min <= amount <= max);
}
但是这似乎不能正常工作。我知道可以用两个比较和逻辑与来实现,但我想用一个比较来实现。是否有任何原生的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浏览器。
运算符(==,<=,<,>=,==)只需要两个参数。
当有多个参数时,它使用数学计算顺序。因此实际上你的代码像这样:
min <= amount // true
true <= max // this is illogical
这也是最佳选择,因为在执行逻辑语句并查找类似以下内容时:
if(false && (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