Javascript isnull

C'est vraiment une bonne fonction écrite en jQuery pour déterminer la valeur d'un champ url:

$.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/

je voudrais ajouter une condition pour tester la valeur null, mais cela ressemble un peu klunky:

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

Q: Quelle est la façon élégante d'accomplir la déclaration ci-dessus si/puis?

10
demandé sur Hannele 2009-12-14 23:58:15

11 réponses

return results == null ? 0 : (results[1] || 0);
22
répondu Brad 2011-08-27 04:17:01
return results == null ? 0 : ( results[1] || 0 );
10
répondu Rich 2011-08-27 04:17:11

la solution la plus courte serait de changer return results[1] || 0;return (results && results[1]) || 0.

3
répondu Dan Davies Brackett 2009-12-14 21:03:34

Vous pouvez essayer ceci:

if(typeof(results) == "undefined") { 
    return 0;
} else {
    return results[1] || 0;
}
2
répondu streetparade 2013-11-12 09:32:02
return results==null ? 0 : ( results[1] || 0 );
1
répondu Frunsi 2009-12-14 21:01:35
return (results||0) && results[1] || 0;

l'opérateur & & agit en tant que gardien et renvoie le 0 si si les résultats sont faux et renvoie la partie la plus à droite si elle est vraie.

1
répondu Teun D 2009-12-14 21:03:49
if (typeof(results)!='undefined'){ 
    return results[1];
} else { 
    return 0; 
};

Mais vous pourriez vouloir vérifier si le résultat est un tableau. Les tableaux sont des objets de type donc vous aurez besoin de ceci function

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

alors votre code devient

if (typeOf(results)==='array'){
      return results[1];
}
else
{
      return 0;
}
1
répondu pixeline 2009-12-14 21:06:19

toutes les solutions mentionnées sont légitimes mais si nous parlons d'élégance alors je vais lancer avec l'exemple suivant:

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

L'utilisation de la fonction isNull aide le code à être plus lisible.

1
répondu Dan Ochiana 2014-09-01 08:34:05

je préfère le style

(results || [, 0]) [1]
1
répondu 2016-06-18 16:43:39

Pourquoi ne pas essayer .test()? ... Essayez son et de la meilleure valeur booléenne (true ou false):

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

Tutoriel: http://www.w3schools.com/jsref/jsref_regexp_test.asp

1
répondu KingRider 2016-11-30 18:28:41

Vous pouvez également utiliser l'opérateur not. Il vérifiera si une variable est nulle, ou, dans le cas d'une chaîne, vide. Il rend votre code plus compact et plus facile à lire.

Par exemple:

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

ceci retournerait false parce que la chaîne est vide. Il retournerait aussi false si la variable pass était nulle.

0
répondu Carlos 2016-10-07 15:27:10