Javascript 有没有更简洁的方法来检查数字是否在某个范围内?
我希望能够测试一个值是否在数字范围内。这是我当前的代码:Javascript 有没有更简洁的方法来检查数字是否在某个范围内?,javascript,range,comparison,Javascript,Range,Comparison,我希望能够测试一个值是否在数字范围内。这是我当前的代码: if ((year < 2099) && (year > 1990)){ return 'good stuff'; } if((年份1990)){ 返回“好东西”; } 有没有更简单的方法?比如说,有这样的东西吗 if (1990 < year < 2099){ return 'good stuff'; } if(1990年
if ((year < 2099) && (year > 1990)){
return 'good stuff';
}
if((年份<2099)和&(年份>1990)){
返回“好东西”;
}
有没有更简单的方法?比如说,有这样的东西吗
if (1990 < year < 2099){
return 'good stuff';
}
if(1990年<2099年){
返回“好东西”;
}
在许多语言中,第二种方法将根据您想要的内容从左到右进行错误评估
例如,在C中,1990
将计算为0或1,然后变成1<2099
,当然,这总是正确的
Javascript与C非常相似:1990
返回true
或false
,这些布尔表达式在数值上分别等于0和1
但在C#中,它甚至不会编译,这会给您带来错误:
错误CS0019:操作员'>>年份=5
>>>1990年<2099年
假的
>>>年份=2000年
>>>1990年<2099年
真的
底线是,第一种方式
(x
始终是您最安全的赌注。如果您不喜欢布尔运算符,您可以始终使用嵌套的If语句:
if (1990 < year)
{
if( year < 2099)
return 'good stuff';
}
if(1990<年)
{
如果(年份<2099)
返回“好东西”;
}
您可以制定自己的方法:
// jquery
$(function() {
var myNumber = 100;
try {
if (myNumber.isBetween(50, 150))
alert(myNumber + " is between 50 and 100.");
else
alert(myNumber + " is not between 50 and 100.");
} catch (e) {
alert(e.message());
}
});
// js prototype
if (typeof(Number.prototype.isBetween) === "undefined") {
Number.prototype.isBetween = function(min, max, notBoundaries) {
var between = false;
if (notBoundaries) {
if ((this < max) && (this > min)) between = true;
alert('notBoundaries');
} else {
if ((this <= max) && (this >= min)) between = true;
alert('Boundaries');
}
alert('here');
return between;
}
}
//jquery
$(函数(){
var myNumber=100;
试一试{
如果(myNumber.isBetween(50150))
警报(myNumber+“介于50和100之间”);
其他的
警报(myNumber+“不在50和100之间”);
}捕获(e){
警报(如message());
}
});
//js原型
if(typeof(Number.prototype.isBetween)=“未定义”){
Number.prototype.isBetween=函数(最小、最大、无边界){
var介于=false之间;
如果(不包括边界){
如果((此<最大值)&(此>最小值))介于=真之间;
警报(“非边界”);
}否则{
如果((此=最小值))介于=真之间;
警报(“边界”);
}
警报(“此处”);
返回之间;
}
}
希望这有帮助
Max来自此处的类似解决方案:
$.fn.between=函数(a,b){
return(a=a&&this[0]=b&&this[0]实现这一点的快速而简单的方法是创建如下函数:
function inRange(n, nStart, nEnd)
{
if(n>=nStart && n<=nEnd) return true;
else return false;
}
inRange(199, 200, 1000) => this return false;
或者像这样:
function inRange(n, nStart, nEnd)
{
if(n>=nStart && n<=nEnd) return true;
else return false;
}
inRange(199, 200, 1000) => this return false;
好的,我的意思是javascript,对不起。我想带&&的两个语句是唯一的方法?-1.你已经将它添加到jQuery对象的原型中,当它打算添加到Number
的原型中时,正如你提供的链接中所解释的。这不仅与OP的问题无关,而且是一件毫无意义的事情。为什么这不相关吗?OP要求一个jquery解决方案,链接描述了一个本地js解决方案。jquery中的所有内容都是一个对象,因此是对象原型。为什么这毫无意义?同意,它要求引用对象的值,而不是对象本身(我已更正)但我不认为这会让它变得荒谬……工作示例:嗯。经过您的修改后,我承认这不再是胡说八道。尽管如此,我仍然不会这么做;没有理由说jQuery解决方案比您链接的解决方案更好,而且据我所知,在数字上调用jQuery(您需要做类似$(4) .between(3,5)
不是人们所做的事情(这是合理的,因为jQuery对象的大多数方法都是特定于DOM元素的);您不必要地打破了正常的jQuery模式,强迫jQuery解决方案使用不需要的东西。如果OP在脚本中使用的是直接的数字数据,那么您是对的;数字原型会更好。但是如果他从输入中获取数字呢?将此[0]更改为此.val()…您会这样做吗?
inRange(199, 200, 1000) => this return false;