2010-12-10 12 views
10

Quiero poder probar si un valor está dentro de un rango numérico. Este es mi código de jQuery ...si el valor está entre dos números

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

¿Existe una manera más sencilla de hacer esto en jQuery? Por ejemplo, ¿hay algo como esto ...

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

Respuesta

19

En muchos idiomas, la segunda manera se evalúa de izquierda para corregir incorrectamente con respecto a lo que quiere.

En C, por ejemplo, 1990 < year se evaluará a 0 o 1, que luego se convierte en 1 < 2099, lo que siempre es cierto, por supuesto.

Javascript es un muy similar a C: 1990 < year rendimientos true o false, y esas expresiones booleanas parecen comparar numéricamente igual a 0 y 1 respectivamente.

Pero en C#, que ni siquiera compilar, que le da el error:

error CS0019: Operator '<' cannot be applied to operands of type 'bool' and 'int'

Usted recibe un error similar a Ruby, mientras Haskell le dice que no se puede utilizar < dos veces en la misma expresión infija .

De la parte superior de mi cabeza, Python es el único lenguaje que estoy seguro que maneja el "entre" la configuración de esa manera:

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

La conclusión es que la primera forma (x < y && y < z) es siempre la más segura apuesta.

+0

bien, me había querido decir en javascript, lo siento. Supongo que las dos declaraciones con && es la única manera? – Inigo

+0

Correcto, eso lo aclaro! gracias – Inigo

0

Si se está preguntando qué idioma tiene esta característica, pitón hace:

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

Si no te gusta el operador booleano, siempre se puede utilizar if anidadas:

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

Usted puede hacer su propio método:

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

esperanza esto ayuda.

Max

+0

muy buen código. Gracias. –

0

partir de una solución similar aquí: 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); 
} 
+0

-1. Has añadido esto al prototipo de objetos jQuery, cuando se pretende agregar al prototipo de 'Número', como se explica en el enlace que proporcionaste. No solo esto no se relaciona con la pregunta del OP, sino que es una cosa sin sentido. –

+0

¿Por qué esto no se relaciona? El OP pidió una solución jquery, el enlace describe una solución js nativa. Todo en jquery es un objeto, de ahí el prototipo del objeto. ¿Por qué no tiene sentido? De acuerdo, requiere que se haga referencia al valor del objeto, en lugar del objeto mismo (que he corregido), pero no creo que eso lo haga absurdo ... ejemplo de trabajo: http://jsfiddle.net/xq4NE/ –

+0

Hmm .Después de sus modificaciones, concederé que ya no es una tontería. Todavía no es algo que haría; no hay ninguna razón por la que la solución jQuery sea mejor que la que se conectó, y que yo sepa, llamando a jQuery en números (necesitaría hacer algo como '$ (4) .between (3,5)' isn Es algo que las personas hacen (razonablemente, ya que la mayoría de los métodos de un objeto jQuery son específicos de los elementos DOM); estás rompiendo patrones jQuery normales innecesariamente, y forzando una solución jQuery a algo que no la necesita. http://www.doxdesk.com/img/updates/20091116-so-large.gif –

Cuestiones relacionadas