如何检查一个数字是否在两个值之间?

在 JavaScript 中,我告诉浏览器如果窗口大于500px 就执行某些操作。我是这样做的:

if (windowsize > 500) {
// do this
}

这个方法工作得很好,但是我想使用同样的方法,但是使用的是一个范围的数字。所以我想告诉我的浏览器做的东西,如果窗口大小在500px 和600px 之间。我知道这行不通,但我是这么想的:

if (windowsize > 500-600) {
// do this
}

在 JavaScript 中这可能吗?

514762 次浏览

测试 windowsize是否大于 500,小于 600,这意味着 500600本身的值都不会导致条件成为真。

if (windowsize > 500 && windowsize < 600) {
// ...
}

我更喜欢把变量放在内部,以提供一个额外的提示,即代码正在验证我的变量是在一个范围值之间

if (500 < size && size < 600) { doStuff(); }

我只是实现了这一点 jQuery 来显示和隐藏引导模态值。根据用户文本框条目的值范围显示不同的字段。

$(document).ready(function () {
jQuery.noConflict();
var Ammount = document.getElementById('Ammount');


$("#addtocart").click(function () {


if ($(Ammount).val() >= 250 && $(Ammount).val() <= 499) {
{
$('#myModal').modal();
$("#myModalLabelbronze").show();
$("#myModalLabelsilver").hide();
$("#myModalLabelgold").hide();
$("#myModalPbronze").show();
$("#myModalPSilver").hide();
$("#myModalPGold").hide();
}
}
});

我有时间,所以,虽然你已经接受了一个答案,我想我可以提供以下几点:

Number.prototype.between = function(a, b) {
var min = Math.min.apply(Math, [a, b]),
max = Math.max.apply(Math, [a, b]);
return this > min && this < max;
};


var windowSize = 550;


console.log(windowSize.between(500, 600));

JS 小提琴演示。

或者,如果您希望选择检查一个数字是在定义范围 包括终点:

Number.prototype.between = function(a, b, inclusive) {
var min = Math.min.apply(Math, [a, b]),
max = Math.max.apply(Math, [a, b]);
return inclusive ? this >= min && this <= max : this > min && this < max;
};


var windowSize = 500;


console.log(windowSize.between(500, 603, true));

JS 小提琴演示。

编辑添加一个较小的修正以上,给予 & nash;

(帮助) Function.prototype.apply()很慢! 除了在你有一个固定数量的参数时调用它是没有意义的(帮助)

取消使用 Function.prototype.apply()是值得的,它产生了上述方法的修订版本,首先没有“包容性”选项:

Number.prototype.between = function(a, b) {
var min = Math.min(a, b),
max = Math.max(a, b);


return this > min && this < max;
};


var windowSize = 550;


console.log(windowSize.between(500, 600));

JS 小提琴演示。

还有“包容性”选项:

Number.prototype.between = function(a, b, inclusive) {
var min = Math.min(a, b),
max = Math.max(a, b);


return inclusive ? this >= min && this <= max : this > min && this < max;
}


var windowSize = 500;


console.log(windowSize.between(500, 603, true));

JS 小提琴演示。

参考文献:

这是个古老的问题,不过对我这样的人可能有用。

lodash具有 _.inRange()功能 https://lodash.com/docs/4.17.4#inRange

例如:

_.inRange(3, 2, 4);
// => true

请注意,这种方法使用的是 Lodash实用程序库,需要访问安装的 Lodash 版本。

可以在 if条件下使用多子句而不是写入

if (windowsize > 500-600) {
// do this
}

因为这根本说不通 从逻辑上讲,JavaScript 将读取您的 if 条件,如

windowSize > -100

因为它计算 500-600-100

例如,您应该使用 &&来严格检查这两种情况,它们看起来都是这样的

if( windowSize > 500 && windowSize < 600 ){


// Then doo something


}

这是最短的方法:

if (Math.abs(v-550)<50) console.log('short')
if ((v-500)*(v-600)<0) console.log('short')

参数化:

if (Math.abs(v-max+v-min)<max+min) console.log('short')
if ((v-min)*(v-max)<0) console.log('short')

如果你不明白第一个的工作原理,你可以把两边都除以2;)

这是一个通用的方法,你可以在任何地方使用

const isBetween = (num1,num2,value) => value > num1 && value < num2

就像大卫的回答,但是我需要包含 a 或者 b,所以我的溶胶:

export const between = (num: number, a: number, b: number, inclusiveA = true, inclusiveB = true): boolean => {
if (a > b) [a, b, inclusiveA, inclusiveB] = [b, a, inclusiveB, inclusiveA];
if (a == b && (inclusiveA || inclusiveB)) [inclusiveA, inclusiveB] = [true, true];
return (inclusiveA ? num >= a : num > a) && (inclusiveB ? num <= b : num < b);
};


if (require.main === module) {
console.log(between(12, 15, 10)); //true
console.log(between(15, 15, 10)); //true
console.log(between(15, 10, 15)); //true
console.log(between(10, 10, 15, false)); //false
console.log(between(15, 10, 10, true, false)); //false
  

//edge case: if a==b then enough that either of the edges is inclusive
console.log(between(10, 10, 10, true, false)); //true
}


它也是类型脚本而不是 javascript

  function handleBetween(number, calc) {
let [a, b] = calc;
let min = Math.min(a, b), max = Math.max(a, b);
return number > min && number < max;
}


if(510 >500 && 510 <600){
console.log(`510 >500 && 510 <600 is true`)
}




if(610 >500 && 610 <600){
// false
console.log(`610 >500 && 610 <600 is true`)
} else console.log(`610 >500 && 610 <600 is false`)




    

console.log(handleBetween(510, [500, 600])); // true
console.log(handleBetween(610, [500, 600])); // false

你可以做得很简单

if (windowsize > 500 && windowsize < 600) {
//your logic
}

或者如果你想要 干净的代码,你可以在任何公共地方的 js 主文件中编写你自己的函数。

Number.prototype.between = function(a, b) {
var min = Math.min.apply(Math, [a, b]),
max = Math.max.apply(Math, [a, b]);
return this > min && this < max;
};

那你可以这么说

if(windowsize.between(500, 600)){
//your logic
}

我知道有一个公认的答案,但我想提供一些方法,可以在某些情况下有用。如果我们想检查 n是否在 xy之间,我们可以这样做:

x <= n && n <= y
(x - n) * (y - n) <= 0

第二种方法非常有用,当您试图得到相同的结果,即使您交换 xy