Existe-t-il une fonction JavaScript universelle qui vérifie qu'une variable a une valeur et s'assure qu'elle ne l'est pas undefined
ou null
? J'ai ce code, mais je ne sais pas s'il couvre tous les cas:
function isEmpty(val){
return (val === undefined || val == null || val.length <= 0) ? true : false;
}
(truthy statement) ? true : false;
. Faites-le(truthy statement);
.if (hungry) …
au lieu deif (hungry === true) …
. Comme toutes les choses de codage de cette manière, c'est juste une question de goût. Plus spécifique à l'exemple fourni par l'OP, il dit encore plus verbalement: "Si c'est vrai, alors vrai, sinon faux" Mais si c'est vrai, alors c'est déjà vrai. Et si c'est faux, c'est déjà faux. Cela revient à dire: "Si vous avez faim, vous en avez et sinon, vous ne l’avez pas."Réponses:
Vous pouvez simplement vérifier si la variable a une
truthy
valeur ou non. Cela signifieévaluera
true
si cevalue
n'est pas le cas :La liste ci-dessus représente toutes les
falsy
valeurs possibles en ECMA- / Javascript. Trouvez-le dans la spécification auToBoolean
section.De plus, si vous ne savez pas si une variable existe (c'est-à-dire si elle a été déclarée ), vous devriez vérifier auprès de l'
typeof
opérateur. Par exempleSi vous pouvez être sûr qu'une variable est déclarée au moins, vous devez vérifier directement si elle a un
truthy
valeur comme indiqué ci-dessus.Pour en savoir plus: http://typeofnan.blogspot.com/2011/01/typeof-is-fast.html
la source
if( value || value === false )
. Il en va de même pour toutes les valeurs de falsification , nous devons les valider explicitement.truthy
pourrait être trompeuse. Dans ce cas, nous devrionsvalue.length != 0
rechercher un tableau non vide.if
construction est syntaxiquement trop lourd, vous pouvez utiliser l'opérateur ternaire, comme suit:var result = undefined ? "truthy" : "falsy"
. Ou si vous voulez juste forcer à une valeur booléenne, utilisez l'!!
opérateur, par exemple!!1 // true
,!!null // false
.La méthode détaillée pour vérifier si la valeur n'est pas définie ou nulle est:
Vous pouvez également utiliser l'
==
opérateur, mais celui-ci attend de connaître toutes les règles :la source
null
ouundefined
peut être fait comme ceci:if (value == null)
. Attention à l'==
opérateur qui contraint. Si vous cochez comme ceciif (value === null || value === undefined)
, vous avez oublié / ne sais pas comment Javascript coercit. webreflection.blogspot.nl/2010/10/…arg == null
produit les mêmes résultats quearg === undefined || arg === null
. Cependant, je considère ce dernier exemple plus lisible.arg == null
est assez commun dans mon expérience.return value === (void 0)
est plus sûr que de tester par rapport àundefined
ce qui pourrait bien être une variable légitime dans la portée, malheureusement.Cela reviendra vrai pour
et zéro fonction d'argument car une fonction
length
est le nombre de paramètres déclarés qu'elle prend.Pour interdire cette dernière catégorie, vous voudrez peut-être simplement vérifier les chaînes vides
la source
undefined == null
maisundefined !== null
C'est le chèque le plus sûr et je ne l'ai pas vu affiché exactement comme ça:
Il couvrira les cas où la valeur n'a jamais été définie, et également l'un d'eux:
Modifié: changé en stricte égalité (! ==) car c'est la norme maintenant;)
la source
typeof
opérateur retourne une chaîne, donc l'utilisation du contrôle d'égalité stricte est techniquement plus précise, plus spécifique et plus rapide. Donc, vraiment, il n'y a aucune raison d'utiliser la comparaison lâche, pas l'inverse. Est égalementval !== null
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'essaye pas de te troller.Vous pouvez trouver la fonction suivante utile:
Ou dans ES7 (commentez si d'autres améliorations)
Résultats:
"Notez que l'opérateur de liaison (: :) ne fait pas partie de ES2016 (ES7) ni d'aucune édition ultérieure de la norme ECMAScript. C'est actuellement une proposition de l'étape 0 (homme de paille) à introduire dans la langue." - Simon Kjellberg. l'auteur souhaite ajouter son soutien à cette belle proposition de recevoir l'ascension royale.
la source
::
) ne fait pas partie de ES2016 (ES7) ni d'aucune édition ultérieure de la norme ECMAScript. C'est actuellement une proposition de l'étape 0 (homme de paille) pour être introduit dans la langue.La première réponse avec la meilleure note est fausse. Si la valeur n'est pas définie, elle lèvera une exception dans les navigateurs modernes. Vous devez utiliser:
ou
la source
undefined
valeur.if(value === 0) gameOver();
;)value
est zéro, ce qui n'est pas ce que op recherche.Cette vérification de l'état
est tout ce dont vous avez besoin.
la source
if
déjà un contrôle de falsification, que cela convertit simplement en un booléen. Attrape-t-il des cas qu'une normaleif(foo)
n'attrape pas?active={!!foo}
! vérifier les chaînes vides (""), null, undefined, false et le nombre 0 et NaN. Disons que si une chaîne est vide,
var name = ""
elleconsole.log(!name)
revienttrue
.cette fonction retournera true si val est vide, null, non défini, false, le nombre 0 ou NaN .
OU
Selon votre domaine de problème, vous pouvez simplement utiliser comme
!val
ou!!val
.la source
isEmpty(val)
si vous pouviez simplement faire!val
?!val
ou!!val
selon votre domaine de problème.Une solution que j'aime beaucoup:
Définissons qu'une variable vide est
null
, ouundefined
, ou si elle a une longueur, elle est nulle, ou si c'est un objet, elle n'a pas de clés:Retour:
undefined
,null
,""
,[]
,{}
true
,false
,1
,0
,-1
,"foo"
,[1, 2, 3]
,{ foo: 1 }
la source
Vous en faites un peu trop. Pour vérifier si une variable ne reçoit pas de valeur, il vous suffit de vérifier par rapport à undefined et null.
Cela suppose
0
,""
et des objets (même objet et tableau vide) sont valides « valeurs ».la source
Si vous préférez le javascript simple, essayez ceci:
Sinon, si vous utilisez déjà un trait de soulignement ou un lodash, essayez:
la source
_.isNil
c'est la fonction que vous recherchez, non_.isEmpty
. documentation isNil , documentation isEmptyisArray
ou neisString
fonctionne pas sur lewindow
.Voici le mien - renvoie vrai si la valeur est nulle, non définie, etc. ou vide (c'est-à-dire ne contient que des espaces vides):
la source
est un moyen très agréable et propre de le gérer dans de nombreux endroits, peut également être utilisé pour attribuer des variables
la source
true
et vous essayez de fournir ou de renvoyer unval
defalse
.const res = falsyValue ? true : falsyValue
Si la variable n'a pas été déclarée, vous ne pourrez pas tester l'indéfini en utilisant une fonction car vous obtiendrez une erreur.
Les deux généreront une erreur si foo n'a pas été déclaré.
Si vous voulez tester si une variable a été déclarée, vous pouvez utiliser
si vous voulez tester si foo a été déclaré et qu'il a une valeur que vous pouvez utiliser
la source
Pour vérifier la valeur par défaut
vérifier Résultat:
J'ai utilisé la fonction @Vix () pour vérifier l'objet de quel type.
en utilisant instansof «
la source
// Number Type [int, float literals ] var int = 77; var float = 77.7; console.log( int.toFixed(10) + '\t' + float.toFixed(10) ); // Object Type var number = new Number( 77 ); if( int != float ) console.log('Data Not Equal'); if( int == number && int !== number ) console.log('Data is Equal & Types vary');
En ES6 avec garniture pour gérer les chaînes d'espaces:
la source
Cela peut être utile.
Toutes les valeurs du tableau représentent ce que vous voulez être (nul, non défini ou autre) et vous recherchez ce que vous voulez dedans.
la source
Si vous utilisez
TypeScript
et que vous ne voulez pas prendre en compte les "valeurs qui sontfalse
", voici la solution pour vous:Première:
import { isNullOrUndefined } from 'util';
Alors:
isNullOrUndefined(this.yourVariableName)
Remarque: comme mentionné ci - dessous, il est désormais obsolète, utilisez-le à la
value === undefined || value === null
place.réf .la source
/** @deprecated since v4.0.0 - use "value === null || value === undefined" instead. */
typescript
chose. Pouvez-vous fournir le lien de sa documentation?Vacuité
Je ne recommande pas d'essayer de définir ou d'utiliser une fonction qui calcule si une valeur dans le monde entier est vide. Que signifie vraiment être "vide"? Si je l'ai
let human = { name: 'bob', stomach: 'empty' }
, devraitisEmpty(human)
revenirtrue
? Si je l'ailet reg = new RegExp('');
, devraitisEmpty(reg)
revenirtrue
? Qu'en est-ilisEmpty([ null, null, null, null ])
- cette liste ne contient que du vide, donc la liste elle-même est-elle vide? Je veux présenter ici quelques notes sur la "vacuité" (un mot intentionnellement obscur, pour éviter les associations préexistantes) en javascript - et je veux faire valoir que la "vacuité" dans les valeurs javascript ne doit jamais être traitée de manière générique.Vérité / fausseté
Pour décider comment déterminer la «vacuité» des valeurs, nous devons tenir compte du sens intrinsèque intégré de javascript de savoir si les valeurs sont «véridiques» ou «fausses». Naturellement,
null
etundefined
sont tous les deux "falsifiés". Moins naturellement, le nombre0
(et aucun autre nombre saufNaN
) est également "falsifié". Le moins naturellement:''
est faux, mais[]
et{}
(etnew Set()
, etnew Map()
) sont vrais - bien qu'ils semblent tous également vides!Null vs Undefined
Il y a aussi une discussion concernant
null
vsundefined
- avons-nous vraiment besoin des deux pour exprimer la vacuité dans nos programmes? Personnellement, j'évite que les lettres u, n, d, e, f, i, n, e, d apparaissent dans mon code dans cet ordre. J'utilise toujoursnull
pour signifier la «vacuité». Encore une fois, cependant, nous devons tenir compte du sens inhérent de javascript de la manièrenull
et de laundefined
différence:undefined
undefined
:undefined
, pasnull
:Vacuité non générique
Je pense que la vacuité ne doit jamais être traitée de manière générique. Au lieu de cela, nous devrions toujours avoir la rigueur pour obtenir plus d'informations sur nos données avant de déterminer si elles sont vides - je le fais principalement en vérifiant le type de données que je traite:
Notez que cette fonction ignore le polymorphisme - elle s'attend
value
à être une instance directe deCls
, et non une instance d'une sous-classe deCls
. J'éviteinstanceof
pour deux raisons principales:([] instanceof Object) === true
("Un tableau est un objet")('' instanceof String) === false
("Une chaîne n'est pas une chaîne")Notez que cela
Object.getPrototypeOf
est utilisé pour éviter un cas commelet v = { constructor: String };
LaisType
fonction renvoie toujours correctement pourisType(v, String)
(false), etisType(v, Object)
(true).Dans l'ensemble, je recommande d'utiliser cette
isType
fonction avec ces conseils:let v = JSON.parse(someRawValue);
, notrev
variable est maintenant de type inconnu. Le plus tôt possible, nous devons limiter nos possibilités. La meilleure façon de le faire peut être d'exiger un type particulier: par exempleif (!isType(v, Array)) throw new Error('Expected Array');
- c'est un moyen très rapide et expressif de supprimer la nature générique dev
, et de s'assurer que c'est toujours unArray
. Parfois, cependant, nous devons permettrev
d'être de plusieurs types. Dans ces cas, nous devons créer des blocs de code quiv
ne sont plus génériques, le plus tôt possible:if (v === null) throw new Error('Null value rejected');
- c'est très bien pour s'assurer que lesnull
valeurs ne passent pas, mais si une valeur le fait , nous savons encore à peine quoi que ce soit à ce sujet. Une valeurv
qui passe ce null-check est encore TRÈS générique - c'est tout saufnull
! Les listes noires dissipent à peine le caractère générique.À moins qu'une valeur ne soit
null
, ne considérez jamais «une valeur vide de sens». Considérez plutôt "un X qui est vide". Essentiellement, n'envisagez jamais de faire quelque chose commeif (isEmpty(val)) { /* ... */ }
- peu importe comment cetteisEmpty
fonction est implémentée (je ne veux pas savoir ...), ce n'est pas significatif! Et c'est bien trop générique! La vacuité ne doit être calculée qu'en connaissantval
le type de. Les contrôles de vacuité devraient ressembler à ceci:if (isType(val, String) && val.length === 0) ...
if (isType(val, Object) && Object.entries(val).length === 0) ...
if (isType(val, Number) && val <= 0) ...
"An Array, with no items":
if (isType(val, Array) && val.length === 0) ...
La seule exception est quand
null
est utilisé pour signifier certaines fonctionnalités. Dans ce cas, il est significatif de dire: "Une valeur vide":if (val === null) ...
la source
Essayez avec une logique différente . Vous pouvez utiliser le code ci-dessous pour vérifier les quatre (4) conditions de validation comme non nul, non vide, non indéfini et non nul uniquement utiliser ce code (! (! (Variable))) en javascript et jquery.
la source
Vous pouvez considérer cette fonctionnalité - l'
??
opérateur - comme un moyen de «retomber» à une valeur par défaut lorsque vous traitez avecnull
ouundefined
.Encore une fois, le code ci-dessus est équivalent au suivant.
la source
mais cette solution est sur-conçue, si vous ne souhaitez pas modifier la fonction plus tard pour les besoins du modèle commercial, il est plus propre de l'utiliser directement dans le code:
la source
Cela ne générera jamais d'erreur. Si myObject , child ou myValue est null, myNewValue sera null. Aucune erreur ne sera levée
la source
Pour tous ceux qui viennent ici pour avoir une question similaire, ce qui suit fonctionne très bien et je l'ai dans ma bibliothèque les dernières années:
la source
Si vous voulez éviter de devenir vrai si la valeur est l'une des suivantes, selon la réponse de jAndy :
Une solution possible qui pourrait éviter d'obtenir des valeurs véridiques est la suivante:
Il serait utilisé comme suit:
En plus de ces scénarios, vous pouvez vouloir retourner false si l' objet ou le tableau est vide:
Vous vous y prendriez de cette façon:
Si vous souhaitez vérifier toutes les chaînes d'espaces (""), vous pouvez procéder comme suit:
Remarque:
hasOwnProperty
renvoie true pour les chaînes vides, 0, false, NaN, null et undefined, si la variable a été déclarée comme l'une d'entre elles, donc ce n'est peut-être pas la meilleure à utiliser. La fonction peut être modifiée pour l'utiliser pour montrer qu'elle a été déclarée, mais n'est pas utilisable.la source
Code sur GitHub
Les tests du pauvre 😁
Résultats de test:
la source
value.constructor === Object
? Vérifiez ça .value.constructor === Object
ça va, en javascript, les instructions IF OR ont un ordre d'exécution, de sorte que l'instruction OR ne s'exécutera que si la précédente n'a pas retourné TRUE et que nous avons déjà vérifiéNull
. En fait, le seul but de cette dernière instruction OR est de détecter{}
et de s'assurer qu'elle ne renvoie pas VRAI pour les choses qu'elle ne devrait pas.Ceci vérifiera si la variable d'imbrication indéterminée n'est pas définie
Ce qui précède vérifie si la fonction de traduction de Google TranslateElement existe. Cela équivaut à:
la source
L'opérateur de chaînage facultatif permet de simplifier l'accès aux valeurs via des objets connectés lorsqu'il est possible qu'une référence ou une fonction soit indéfinie ou nulle.
L'opérateur coalescent nul peut être utilisé après un chaînage optionnel afin de construire une valeur par défaut quand aucune n'a été trouvée:
la source
il vérifiera également les espaces blancs ('') ainsi que les éléments suivants:
la source
Je pense qu'en utilisant le? l'opérateur est légèrement plus propre.
la source