Если значение находится между двумя номерами
Я хочу, чтобы проверить, находится ли значение в пределах диапазона. Это мой код 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';
}
Ответ 5
Из аналогичного решения здесь: http://indisnip.wordpress.com/2010/08/26/quicktip-check-if-a-number-is-between-two-numbers/
$.fn.between = function(a,b){
return (a < b ? this[0] >= a && this[0] <= b : this[0] >= b && this[0] <= a);
}