2906 votes

Existe-t-il une fonction standard pour vérifier les variables nulles, indéfinies ou vides en JavaScript ?

Existe-t-il une fonction JavaScript universelle qui vérifie qu'une variable a une valeur et s'assure qu'elle n'en a pas. undefined o null ? J'ai ce code, mais je ne suis pas sûr qu'il couvre tous les cas :

function isEmpty(val){
    return (val === undefined || val == null || val.length <= 0) ? true : false;
}

6 votes

0 votes

J'ai fait un violon pour le tester : jsfiddle.net/J7m7m/886

170 votes

Protip, ne faites jamais (truthy statement) ? true : false; . Faites juste (truthy statement); .

5485voto

jAndy Points 93076

Vous pouvez simplement vérifier si le variable a un truthy ou non. Cela signifie que

if( value ) {
}

évaluera à true si value es no :

  • null
  • indéfini
  • NaN
  • chaîne vide ("")
  • 0
  • faux

La liste ci-dessus représente toutes les possibilités falsy dans ECMA-/Javascript. Vous le trouverez dans le spécification au ToBoolean section.

En outre, si vous ne connaître si une variable existe (c'est-à-dire, si elle a été déclaré ), vous devez vérifier auprès de la typeof opérateur. Par exemple

if( typeof foo !== 'undefined' ) {
    // foo could get resolved and it's defined
}

Si vous pouvez être sûr qu'un variable est au moins déclarée, vous devez vérifier directement si elle possède un élément de type truthy comme indiqué ci-dessus.

165 votes

Et si la valeur est un booléen faux qui était prévu. Parfois, vous voulez donner une valeur par défaut s'il n'y a pas de valeur, ce qui ne fonctionnera pas si un faux booléen a été passé.

121 votes

@TruMan1 : dans un tel cas (où votre logique dicte la validation), vous devez procéder comme suit if( value || value === false ) . Il en va de même pour tous valeurs superficielles nous devons les valider explicitement.

37 votes

Sauf si la valeur est un tableau. L'interprétation de truthy pourrait être trompeuse. Dans ce cas, nous devrions vérifier value.length != 0 pour un tableau non vide.

319voto

Salman A Points 60620

La méthode verbeuse pour vérifier si la valeur est indéfinie ou nulle est :

return value === undefined || value === null;

Vous pouvez également utiliser le == mais celui-ci s'attend à ce que l'on connaître toutes les règles :

return value == null; // also returns true if value is undefined

44 votes

Vérification de seulement null o undefined peut se faire comme suit : if (value == null) . L'esprit == opérateur qui contraint. Si vous vérifiez comme ceci if (value === null || value === undefined) vous avez oublié/ne savez pas comment Javascript contraint. webreflection.blogspot.nl/2010/10/

48 votes

@ChristiaanWesterbeek : votre point que arg == null produit les mêmes résultats que arg === undefined || arg === null . Cependant, je considère que ce dernier exemple est plus lisible.

15 votes

arg == null est assez courante d'après mon expérience.

117voto

Mike Samuel Points 54712
function isEmpty(value){
  return (value == null || value.length === 0);
}

Ceci retournera vrai pour

undefined  // Because undefined == null

null

[]

""

et les fonctions à zéro argument, car l'argument de la fonction length est le nombre de paramètres déclarés qu'il prend.

Pour exclure cette dernière catégorie, vous pouvez vous contenter de vérifier les chaînes vides.

function isEmpty(value){
  return (value == null || value === '');
}

Nul ou espace blanc

function isEmpty(value){
  return (value == null || value.trim().length === 0);
}

11 votes

undefined == null pero undefined !== null

3 votes

@IanBoyd c'est parce que vous comparez == à ===. cela signifie que undefined == null (true) undefined != null (false) undefined === null (false) undefined !== null(true) il serait préférable de donner un peu plus d'informations afin d'être utile et de pousser les gens dans la bonne direction. moz doc sur la différence developer.mozilla.org/fr/US/docs/Web/JavaScript/

0 votes

Value.trim() se plantera sur les valeurs suivantes : [], {}

71voto

guya Points 601

C'est le contrôle le plus sûr et je ne l'ai pas vu affiché ici exactement comme ça :

if (typeof value !== 'undefined' && value) {
    //deal with value'
};

Elle couvrira les cas où valeur n'a jamais été défini, et aussi n'importe lequel de ces éléments :

  • null
  • undefined (la valeur de undefined n'est pas la même que celle d'un paramètre qui n'a jamais été défini)
  • 0
  • "" (chaîne vide)
  • faux
  • NaN

Édité : Changé en égalité stricte (!==) parce que c'est la norme maintenant ;)

10 votes

Je n'ai pas rétrogradé, mais en ce qui concerne la comparaison de l'égalité stricte, la règle générale est que, à moins que vous besoin de la conversion implicite de type que la comparaison stricte doit être utilisée.

4 votes

Merci pour votre commentaire Steve. Cette règle générale est très bien. J'attends simplement que les gens comprennent pourquoi ils utilisent l'un ou l'autre. Partout où vous regardez, les gens seront heureux de vous sermonner sur "toujours utiliser strict" - comme si c'était la chose la plus importante en Javascript. J'ai vu trop de cas comme si(val !== null) ce qui conduit évidemment à un résultat non souhaité. C'est bien de dire qu'en cas de doute, il faut utiliser la méthode stricte, mais il est préférable de ne pas avoir de doute.

7 votes

Je pense que le point ici est que nous nous attendons à ce que les typeof pour retourner une chaîne de caractères. L'utilisation de la vérification stricte de l'égalité est donc techniquement plus précise, plus spécifique et plus rapide. Donc, en réalité, il n'y a aucune raison d'utiliser la comparaison libre, et non l'inverse. Voir aussi val !== null est parfaitement valable dans de nombreux cas - je le fais tout le temps. Je suis d'accord avec votre argument de non-conformité, mais je pense que c'est un mauvais exemple pour le faire. Je n'essaie pas de vous troller.

27voto

krupar Points 61

La première réponse avec le meilleur classement est fausse. Si la valeur est indéfinie, une exception sera levée dans les navigateurs modernes. Vous devez utiliser :

if (typeof(value) !== "undefined" && value)

o

if (typeof value  !== "undefined" && value)

3 votes

Eee... Je pense que c'est faux car if(value) est suffisant (sauf pour les objets / tableaux vides). Si value est 'undefined' la confition 'if' ne passera pas.

4 votes

Cela confond les variables qui ne sont pas définies (qui lèvent une ReferenceError lors de l'évaluation), qui sont différentes des variables avec l'attribut undefined valeur.

2 votes

J'ai eu la même erreur ici. if(x), if(!x), if(!!x) vont tous lancer une erreur si x est indéfini.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X