web-dev-qa-db-fra.com

Javascript isnull

C'est une très 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 null, mais cela ressemble un peu à klunky:

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

Q: Quelle est la manière élégante d’accomplir la déclaration ci-dessus si/alors?

10
Phillip Senn
return results == null ? 0 : (results[1] || 0);
22
Brad
return results == null ? 0 : ( results[1] || 0 );
10
Rich

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

3
Dan Davies Brackett

Vous pouvez essayer ceci:

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

Je préfère le style

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

Mais vous voudrez peut-être vérifier si les résultats sont un tableau. Les tableaux sont de type Object, vous aurez donc besoin de cette fonction function

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

Donc, votre code devient

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

L'opérateur && joue le rôle de garde et renvoie le 0 si le résultat est faussé et renvoie la partie la plus à droite en cas de vérité.

1
Teun D

Pourquoi ne pas essayer .test()? ... Essayez son et meilleur booléen (vrai ou faux):

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

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

1
KingRider

Toutes les solutions mentionnées sont légitimes, mais si nous parlons d’élégance, je donnerai 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
Dan Ochiana

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

Par exemple:

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

Cela renverrait false car la chaîne est vide. Il renverrait également false si la variable pass était null. 

0
Carlos