2009-12-14 27 views
9

Esto es realmente un gran función escrita en jQuery para determinar el valor de un campo url:Javascript isnull

$.urlParam = function(name){ 
    var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(window.location.href); 
    return results[1] || 0; 
} 

// example.com?someparam=name&otherparam=8&id=6 
$.urlParam('someparam'); // name 
$.urlParam('id'); // 6 
$.urlParam('notavar'); // null 

http://snipplr.com/view/11583/retrieve-url-params-with-jquery/

Me gustaría añadir una condición para la prueba de nulo, pero esto parece tipo de klunky:

if (results == null) { 
    return 0; 
} else { 
    return results[1] || 0; 
} 

P: ¿Cuál es la forma elegante de lograr la instrucción if/then anterior?

+0

lol, pieza exacta del código que estaba a punto de hacer la pregunta exacta en.3 años después – sMaN

+0

La prueba de 'resultados [1]' sería innecesaria, ya que si 'resultados 'no es nulo, significa que la expresión regular tuvo éxito, lo que significa que también se encontró el primer grupo capturado. ¿Entonces todo lo que necesitas es 'resultados? resultados [1]: 0'. –

Respuesta

21
return results == null ? 0 : (results[1] || 0); 
+0

@Brad ¿Qué es (resultados [1] || 0)? No he visto eso antes. – imperium2335

+0

Es el objeto en la posición de índice 1 en 'resultados' o el valor 0. – Brad

+0

Brad, intente utilizar '.test()' es el mejor – KingRider

10
return results == null ? 0 : (results[1] || 0); 
+0

no es cierto: el || se ocupa del valor en los resultados [1] – Frunsi

+0

@DDaviesBrackett: no: js> results = null; nulo js> resultados [1] || 0; typein: 2: TypeError: results no tiene propiedades –

+0

Bueno, parece que respondiste primero, así que estás recibiendo mi voto popular. –

1
if (typeof(results)!='undefined'){ 
    return results[1]; 
} else { 
    return 0; 
}; 

Pero es posible que desee comprobar si los resultados es una matriz. Las matrices son de tipo Object por lo que tendrá este function

function typeOf(value) { 
    var s = typeof value; 
    if (s === 'object') { 
     if (value) { 
      if (value instanceof Array) { 
       s = 'array'; 
      } 
     } else { 
      s = 'null'; 
     } 
    } 
    return s; 
} 

Así que su código se convierte en

if (typeOf(results)==='array'){ 
     return results[1]; 
} 
else 
{ 
     return 0; 
} 
1
return results==null ? 0 : (results[1] || 0); 
+0

Acaba de volver a escribir el código proporcionado por el OP para usar el operador ternario en lugar de ' si'. –

2

Usted podría intentar esto:

if(typeof(results) == "undefined") { 
    return 0; 
} else { 
    return results[1] || 0; 
} 
3

el más terso La solución sería cambiar return results[1] || 0; a return (results && results[1]) || 0.

+0

Recibo un error "results is null" en firebug si devuelvo los resultados [1] || 0 –

+0

¿Qué significa && do? ¿Puedes explicar esta línea de código por favor? –

+0

No es necesario para los parens, esa es la precedencia predeterminada, por lo que 'results && results [1] || 0'. –

1
return (results||0) && results[1] || 0; 

Los & & operador actúa como protector y devuelve el 0 si los resultados si Falsy y devolver la parte más a la derecha si Truthy.

1

Todas las soluciones mencionadas son de fiar, pero si estamos hablando de la elegancia entonces voy a arrimar el hombro con el siguiente ejemplo:

//function that checks if an object is null 
var isNull = function(obj) { 
    return obj == null; 
}    

if(isNull(results)){ 
return 0; 
} else { 
    return results[1] || 0; 
} 

Uso de la función isNull ayuda a que el código sea más legible.

1

prefiero el estilo

(results || [, 0]) [1] 
+0

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación. – sanders

+1

Proporciona una respuesta explícita a la pregunta. No es una crítica o solicitud de aclaración. ¿En qué sentido no es una respuesta? Es una construcción que utilizo todo el tiempo para tratar la pregunta precisa que hace el OP, que es cómo tratar de forma concisa un resultado 'nulo' de' RegExp # exec'. –

+0

Me gusta esta respuesta mejor porque no puedo encontrar una manera de malinterpretarla Y, lo que es más importante, la respuesta predeterminada (0) se especifica solo una vez. Muchos errores de codificación se introducen cuando aparece un número mágico en particular en más de un lugar. –

0

También puede utilizar el operador not. Comprobará si una variable es nula o, en el caso de una cadena, está vacía. Hace que su código sea más compacto y fácil de leer.

Por ejemplo:

var pass = ""; 
if(!pass) 
    return false; 
else 
    return true; 

Esto return false porque la cadena está vacía. También devolvería falso si el pase variable fuera nulo.

Cuestiones relacionadas