Если значение находится между двумя номерами

Я хочу, чтобы проверить, находится ли значение в пределах диапазона. Это мой код jQuery...

if ((year < 2099) && (year > 1990)){
    return 'good stuff';
}

Есть ли более простой способ сделать это в jQuery? Например, есть что-то вроде этого...

if (1990 < year < 2099){
    return 'good stuff';
}

Ответ 1

Во многих языках второй путь будет неправильно оценен слева направо в отношении того, что вы хотите.

В C, например, 1990 < year будет оцениваться до 0 или 1, что затем становится 1 < 2099, что всегда верно.

Javascript довольно похож на C: 1990 < year возвращает true или false, и эти логические выражения, по-видимому, численно сравниваются с равными 0 и 1 соответственно.

Но в С# он даже не компилируется, что дает вам ошибку:

ошибка CS0019: Оператор '<' не может применяться к операндам типа "bool" и "int"

Вы получаете аналогичную ошибку от Ruby, в то время как Haskell сообщает вам, что вы не можете использовать < дважды в одном и том же выражении infix.

Сверху моей головы Python - единственный язык, который, я уверен, обрабатывает "между" настройками таким образом:

>>> year = 5
>>> 1990 < year < 2099
False
>>> year = 2000
>>> 1990 < year < 2099
True

Суть в том, что первым способом (x < y && y < z) всегда является ваша самая безопасная ставка.

Ответ 2

Вы можете создать свой собственный метод:

// 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;
    }
}

надеюсь, что это поможет.

Max

Ответ 3

Если вы спрашиваете, какой язык имеет эту функцию, python делает:

 if (1990 < year < 2099):
     return 'good stuff'

Ответ 4

Если вам не нравится логический оператор, вы всегда можете использовать вложенные операторы if:

if (1990 < year)
{
    if( year < 2099)
        return 'good stuff';
}