J'ai vu cette question , mais je n'ai pas vu d'exemple spécifique à JavaScript. Existe-t-il un simple string.Empty
disponible en JavaScript, ou s'agit-il simplement d'une vérification ""
?
javascript
null
is-empty
casademora
la source
la source
Réponses:
Si vous voulez simplement vérifier s'il y a une valeur, vous pouvez le faire
Si vous devez vérifier spécifiquement une chaîne vide par rapport à null, je pense que la vérification contre
""
est votre meilleur pari, en utilisant l'===
opérateur (afin que vous sachiez qu'il s'agit en fait d'une chaîne que vous comparez).la source
=== ''
vs.length
n'ont montré aucune amélioration perceptible (et n'utilisent.length
que des travaux si vous pouvez supposer que vous avez une chaîne).length > 0
c'est en fait beaucoup plus rapide que de le comparer à un littéral de chaîne! Découvrez ce jsPerfPour vérifier si une chaîne est vide, nulle ou non définie, j'utilise:
Pour vérifier si une chaîne est vide, nulle ou non définie, j'utilise:
Pour vérifier si une chaîne est vide ou ne contient que des espaces blancs:
la source
if (variable == constant value)
et si vous oubliez un '=', vous affectez la valeur constante à la variable au lieu de tester. Le code fonctionnera toujours car vous pouvez attribuer une variable dans un if. Une manière plus sûre d'écrire cette condition consiste donc à inverser la valeur constante et la variable. De cette façon, lorsque vous testez votre code, vous verrez une erreur (côté gauche non valide dans l'affectation). Vous pouvez également utiliser quelque chose comme JSHint pour interdire l'affectation dans des conditions et être averti lorsque vous en écrivez une./^\s*$/.test(str)
ne soit pas vraiment lisible - peut-être que supprimer des espaces en utilisant du code plus simple ou des expressions rationnelles serait mieux? voir stackoverflow.com/questions/6623231/… et aussi stackoverflow.com/questions/10800355/…if blue is the sky
. Voir dodgycoder.net/2011/11/11/yoda-conditions-pokemon-exception.htmlToutes les réponses précédentes sont bonnes, mais ce sera encore mieux. Utilisez l' opérateur
!!
( pas non ).Ou utilisez le casting de type:
Les deux remplissent la même fonction. Typecast la variable en booléen, où
str
est une variable.Il revient
false
pournull,undefined,0,000,"",false
.Il renvoie la
true
chaîne "0" et les espaces "".la source
if(str)
etif(!!str)
?var any = (!!str1 && !!str2 && !!str3)
manipulation s'il y a un certain nombre là aussi!!str.trim()
pour vous assurer que la chaîne n'est pas faite uniquement d'espaces.Boolean(str)
est beaucoup plus lisible et moins "wtfish".La chose la plus proche à laquelle vous pouvez accéder
str.Empty
(avec la condition préalable que str est une chaîne) est:la source
str.Empty
.Si vous devez vous assurer que la chaîne n'est pas juste un tas d'espaces vides (je suppose que c'est pour la validation du formulaire), vous devez faire un remplacement sur les espaces.
la source
if(str.match(/\S/g)){}
str.match(/\S/)
var trimLeft = /^\s+/, trimRight = /\s+$/;
J'utilise:
la source
typeof
dans leswitch
ne fonctionnait pas pour moi. J'ai ajouté unif (typeof e == "undefined")
test et ça marche. Pourquoi?case undefined:
place decase typeof(e) == "undefined":
?Vous pouvez utiliser lodash : _.isEmpty (valeur).
Il couvre beaucoup de cas comme
{}
,''
,null
,undefined
, etc.Mais elle retourne toujours
true
pour leNumber
type de JavaScript types de données primitives comme_.isEmpty(10)
ou les_.isEmpty(Number.MAX_VALUE)
deux déclarationstrue
.la source
_.isEmpty(" "); // => false
" "
n'est pas vide._.isEmpty("");
renvoie vrai.Essayer:
la source
str.trim().length
fera plus vite questr.trim()
d'environ 1% selon mes propres résultats de test.if (!str) { ... }
Une fonction:
PS: En JavaScript, n'utilisez pas de saut de ligne après
return
;la source
if
déclaration.Il n'y a rien qui représente une chaîne vide en JavaScript. Faites une vérification contre
length
(si vous savez que la var sera toujours une chaîne) ou contre""
la source
Je ne m'inquiéterais pas trop de la méthode la plus efficace . Utilisez ce qui est le plus clair pour votre intention. Pour moi, c'est généralement
strVar == ""
.Selon le commentaire de Constantin , si strVar pouvait finir par contenir une valeur entière 0, ce serait en effet l'une de ces situations de clarification de l'intention.
la source
===
. Il ne renvoie vrai que sistrVar
est une chaîne vide.Performance
J'effectue des tests sur macOS v10.13.6 (High Sierra) pour 18 solutions choisies. Les solutions fonctionnent légèrement différemment (pour les données d'entrée de cas d'angle), ce qui a été présenté dans l'extrait ci-dessous.
Conclusions
!str
,==
,===
etlength
sont rapides pour tous les navigateurs (A, B, C, G, I, J)test
,replace
) etcharAt
sont les plus lentes pour tous les navigateurs (H, L, M, P)Détails
Dans l'extrait ci-dessous, je compare les résultats des 18 méthodes choisies en utilisant différents paramètres d'entrée
""
"a"
" "
- chaîne vide, chaîne avec lettre et chaîne avec espace[]
{}
f
- tableau, objet et fonction0
1
NaN
Infinity
- Nombrestrue
false
- booléennull
undefined
Toutes les méthodes testées ne prennent pas en charge tous les cas d'entrée.
Afficher l'extrait de code
Et puis pour toutes les méthodes
str = ""
, j'effectue un test de vitesse pour les navigateurs Chrome v78.0.0, Safari v13.0.4 et Firefox v71.0.0 - vous pouvez exécuter des tests sur votre machine icila source
Beaucoup de réponses et beaucoup de possibilités différentes!
Sans aucun doute pour une mise en œuvre simple et rapide, le gagnant est:
if (!str.length) {...}
Cependant, comme de nombreux autres exemples sont disponibles. La meilleure méthode fonctionnelle pour y parvenir, je suggère:
Un peu excessif, je sais.
la source
str.length === 0
renvoie true pour toute fonction qui n'a pas de paramètres formels.Vous pouvez également utiliser des expressions régulières:
Recherche les chaînes vides ou remplies d'espaces.
la source
var a;
existentrogner
false spaces
la valeur, puis tester pouremptiness
la source
De plus, si vous considérez une chaîne remplie d'espaces comme "vide".
Vous pouvez le tester avec cette expression régulière:
la source
J'utilise habituellement quelque chose comme ça,
la source
typeof variable != "undefined"
avant de vérifier s'il est vide.Je n'ai pas remarqué de réponse prenant en compte la possibilité de caractères nuls dans une chaîne. Par exemple, si nous avons une chaîne de caractères nulle:
Pour tester sa nullité, on pourrait faire quelque chose comme ceci:
Il fonctionne sur une chaîne nulle et sur une chaîne vide et il est accessible à toutes les chaînes. En outre, il pourrait être développé pour contenir d'autres caractères JavaScript vides ou blancs (c'est-à-dire un espace insécable, une marque d'ordre des octets, un séparateur de ligne / paragraphe, etc.).
la source
Pendant ce temps, nous pouvons avoir une fonction qui vérifie tous les «vides» comme null, undefined, «», «», {}, [] . Je viens donc d'écrire ceci.
Cas d'utilisation et résultats.
la source
Pour l'instant, il n'y a pas de méthode directe comme string.empty pour vérifier si une chaîne est vide ou non. Mais dans votre code, vous pouvez utiliser une vérification de wrapper pour une chaîne vide comme:
En utilisant cela, vous pouvez également vous assurer que la chaîne n'est pas non plus définie ou nulle également. Rappelez-vous que non défini, nul et vide sont trois choses différentes.
la source
let rand = ()=>Math.random()
, puisrand && rand.length > 0)
retournez false, mais clairement fn n'est pas "vide". C'est-à-dire qu'il retourne faux pour toute fonction qui n'a pas de paramètres de format.Math.random()
renvoie un nombre et non une chaîne. Et cette réponse concerne les chaînes. ;-)Toutes ces réponses sont agréables.
Mais je ne peux pas être sûr que la variable est une chaîne, ne contient pas que des espaces (c'est important pour moi) et peut contenir '0' (chaîne).
Ma version:
Échantillon sur jsfiddle .
la source
empty(0)
et devezempty(7)
renvoyer la même valeur.empty("0")
doit retournerfalse
(car ce n'est pas une chaîne vide), maisempty(0)
doit retournertrue
parce qu'elle est vide :)empty
c'est un nom trompeur dans ce cas.empty
est bon. Dans les documents php pour la fonction vide :Returns FALSE if var exists and has a non-empty, non-zero value. Otherwise returns TRUE.
La différence entrePHP
et cette fonction - cette chaîne'0'
ne sera pas identifiée comme vide.empty
c'est un nom inexact et trompeur. Il est intéressant de noter que PHP a également une fonction mal nomméeempty
, mais les défaillances de PHP n'ont rien à voir avec JavaScript.Je n'ai pas vu de bonne réponse ici (du moins pas une réponse qui me convient)
J'ai donc décidé de me répondre:
value === undefined || value === null || value === "";
Vous devez commencer à vérifier s'il n'est pas défini. Sinon, votre méthode peut exploser, puis vous pouvez vérifier si elle est égale à null ou est égale à une chaîne vide.
Vous ne pouvez pas avoir !! ou seulement
if(value)
parce que si vous cochez,0
cela va vous donner une fausse réponse (0 est faux).Cela dit, enveloppez-le dans une méthode comme:
public static isEmpty(value: any): boolean { return value === undefined || value === null || value === ""; }
PS: Vous n'avez pas besoin de vérifier le typeof , car il exploserait et se lancerait même avant d'entrer dans la méthode
la source
Si l'on a besoin de détecter non seulement des chaînes vides mais aussi vides, j'ajouterai à la réponse de Goral:
la source
Essaye ça
la source
"".value.length
provoquera une erreur. Cela devrait êtrestr.length === 0
TypeError
Ifstr
est égal àundefined
ounull
Vous pouvez facilement l'ajouter à l' objet String natif en JavaScript et le réutiliser encore et encore ...
Quelque chose de simple comme le code ci-dessous peut faire le travail pour vous si vous souhaitez vérifier
''
les chaînes vides:Sinon, si vous souhaitez vérifier à la fois la
''
chaîne vide et l'' '
espace, vous pouvez le faire en ajoutant simplementtrim()
quelque chose comme le code ci-dessous:et vous pouvez l'appeler de cette façon:
la source
!(!!this.length)
plutôt que juste!this
(ou!this.trim()
pour la deuxième option)? Une chaîne de longueur nulle est déjà fausse, les parenthèses sont redondantes et la nier trois fois équivaut exactement à la nier une fois.Essaye ça:
la source
J'ai fait des recherches sur ce qui se passe si vous passez une valeur non chaîne et non vide / nulle à une fonction de testeur. Comme beaucoup le savent, (0 == "") est vrai en JavaScript, mais comme 0 est une valeur et non vide ou nulle, vous voudrez peut-être la tester.
Les deux fonctions suivantes renvoient true uniquement pour les valeurs non définies, nulles, vides / blancs et false pour tout le reste, comme les nombres, les booléens, les objets, les expressions, etc.
Des exemples plus compliqués existent, mais ils sont simples et donnent des résultats cohérents. Il n'est pas nécessaire de tester undefined, car il est inclus dans la vérification (valeur == null). Vous pouvez également imiter le comportement C # en les ajoutant à String comme ceci:
Vous ne voulez pas le mettre dans le prototype Strings, car si l'instance de la classe String est nulle, cela produira une erreur:
J'ai testé avec le tableau de valeurs suivant. Vous pouvez le parcourir pour tester vos fonctions en cas de doute.
la source
Pour vérifier s'il s'agit exactement d'une chaîne vide:
Pour vérifier s'il s'agit d'une chaîne vide OU d'un équivalent logique pour aucune valeur (null, undefined, 0, NaN, false, ...):
la source
Il n'y a pas de
isEmpty()
méthode, vous devez vérifier le type et la longueur:La vérification de type est nécessaire afin d'éviter les erreurs d'exécution lorsque
test
estundefined
ounull
.la source
En ignorant les chaînes d'espaces blancs, vous pouvez utiliser ceci pour vérifier les valeurs nulles, vides et non définies:
Il est concis et fonctionne pour les propriétés non définies, bien qu'il ne soit pas le plus lisible.
la source