176

在 JavaScript 中,如果窗口大小大于 500 像素,我会告诉浏览器执行某些操作。我这样做:

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

这很好用,但我想应用同样的方法,但有一系列数字。所以我想告诉我的浏览器在窗口大小在 500px 到 600px 之间时做些什么。我知道这行不通,但这是我的想象:

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

在 JavaScript 中这是否可能?

4

11 回答 11

268

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

if (windowsize > 500 && windowsize < 600) {
  // ...
}
于 2013-02-05T22:58:29.710 回答
138

我有一点时间,所以,虽然你已经接受了答案,但我想我会贡献以下内容:

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 小提琴演示

鉴于——如评论中所述——编辑对上述内容进行了小修改

……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 小提琴演示

参考:

于 2013-09-18T20:31:51.710 回答
99

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

if (500 < size && size < 600) { doStuff(); }
于 2013-02-05T23:06:07.587 回答
34

这是一个老问题,但可能对像我这样的人有用。

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

例子:

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

请注意,此方法使用Lodash实用程序库,并且需要访问已安装的 Lodash 版本。

于 2017-05-25T15:12:14.070 回答
3

您可以在条件中使用 Multiple 子句if而不是编写

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

因为这在逻辑上真的没有意义 JavaScript 会读取你的 if 条件

windowSize > -100 

因为它计算500-600-100

您应该使用&&严格检查这两种情况,例如看起来像这样

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

// Then doo something

}
于 2019-12-04T06:21:56.900 回答
3

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

const isBetween = (num1,num2,value) => value > num1 && value < num2 
于 2020-11-25T07:58:55.170 回答
2

你可以简单地做到这一点

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
}
于 2021-08-23T12:11:24.493 回答
1

这是可能的最短方法:

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;)

于 2020-04-28T08:52:28.837 回答
0

我刚刚实现了一点 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();
                }
            }
    });
于 2013-09-18T20:22:51.360 回答
0

就像大卫的回答一样,但我需要 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

于 2021-06-22T15:06:44.290 回答
0

  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

于 2021-08-23T11:57:11.177 回答