Est-il possible de retourner 0 au lieu de NaN
lors de l'analyse des valeurs en JavaScript?
En cas de parseInt
retour de la chaîne vide NaN
.
Est-il possible de faire quelque chose comme ça en JavaScript pour vérifier NaN
?
var value = parseInt(tbb) == NaN ? 0 : parseInt(tbb)
Ou peut-être existe-t-il une autre fonction ou un plugin jQuery qui peut faire quelque chose de similaire?
javascript
nan
Joper
la source
la source
NaN != NaN
. Vous en auriez besoinisNaN(value)
.parseInt()
deux fois la fonction (dans leNaN
cas non réussi / normal ) n'est jamais une bonne idée. En dehors de l'inefficacité, pour les imprudents si tout ce qui est passétbb
est un appel de fonction avec des effets secondaires, c'est terrible. Je n'utiliserais aucune solution ici où je voisparseInt()
deux fois.Réponses:
Lorsqu'il n'est pas utilisé avec des valeurs booléennes, l'
||
opérateur logique OR ( ) renvoie la première expression (parseInt(s)
) si elle peut être évaluée à true, sinon il renvoie la deuxième expression (0). La valeur de retour deparseInt('')
est NaN. NaN est évalué à faux, doncnum
finit par être mis à 0.la source
0
au lieu deNaN
. Ceci est résolu parfaitement par le code de Matt.var nextIphone = parseInt("4S") + 1; // wow it works!
Vous pouvez également utiliser la
isNaN()
fonction:la source
parseInt(s)
deux fois? En outre, cela devrait êtreparseInt(s, 10)
parseInt()
deux fois cependant.J'ai été surpris de ne voir personne mentionner l'utilisation
Number()
. Certes, il analysera les décimales s'il est fourni, il agira donc différemment deparseInt()
, cependant il suppose déjà la base 10 et transformera "" ou même "" en 0.la source
Pour les personnes qui ne sont pas limitées à
parseInt
, vous pouvez utiliser l'opérateur OR au niveau du bit (qui appelle implicitementToInt32
ses opérandes).Remarque:
ToInt32
est différent deparseInt
. (ieparseInt('33Ab') === 33
)la source
'10000000000' | 0 === 1410065408
.Math.pow(2, 31)
débordera.Le problème
Les autres réponses ne prennent pas en compte ce qui
0
est faux, et donc les suivantes seront 20 au lieu de 0:La solution
Je propose une fonction d'aide, qui résout la plupart des problèmes:
La fonction d'assistance donnera les résultats suivants:
la source
parseInt(string, radix)
considérez ceci: pourraitparseInt("0x10") === 16
égalementparseInt("010")
produire8
dans certains navigateursdefaultTo
fonction pratique qui fait exactement cela:_.defaultTo(NaN, -1)
retourne-1
, mais_.defaultTo(0, -1);
revient0
.parseInt
deux foisEst-ce que le travail est beaucoup plus propre que l'analyse à mon avis, utilisez l'opérateur +
la source
la source
Effectuez une vérification distincte pour une chaîne vide (car il s'agit d'un cas spécifique) et définissez-la sur zéro dans ce cas.
Vous pouvez appeand "0" au début, mais vous devez ensuite ajouter un préfixe pour indiquer qu'il s'agit d'un nombre décimal et non octal
la source
Pourquoi ne pas remplacer la fonction? Dans ce cas, vous pouvez toujours être sûr qu'il revient
0
en cas deNaN
:Maintenant, n'importe où dans votre code:
la source
|| 0
comme dans la réponse de Matt. Je vois des objets prioritaires que vous ne possédez pas en dernier recours ou, dans le cas contraire, cela coûterait beaucoup plus cher en termes de temps et de complexité.J'ai eu un problème similaire (firefox v34) avec des chaînes simples comme:
J'ai donc trouvé un hack rapide de:
Et puis tout est devenu stupide et compliqué de gérer les flotteurs + les pouces pour des choses non simples:
Il renverra 0 pour des choses comme:
la source
la source
||
approche. Je sais que c'est une vieille question et réponse, mais cette réponse évite d'appeler parseInt deux fois et utilise correctement isNaN. Il a juste besoin que la radixparseInt(x, 10)
soit approfondie. (Ma préférence est une variable interne distincte au lieu de réutiliserx
.)J'ai créé un prototype 2 pour gérer cela pour moi, un pour un nombre et un pour une chaîne.
Si vous ne souhaitez pas utiliser le contrôle de sécurité, utilisez
Exemple d'utilisation:
la source
Explication, pour ceux qui ne trouvent pas cela trivial:
La multiplication par un, une méthode appelée «distribution implicite», tente de transformer l'opérande de type inconnu en «nombre» de type primitif. En particulier, une chaîne vide deviendrait numéro 0, ce qui en ferait un type éligible pour parseInt () ...
Un très bon exemple a également été donné ci-dessus par PirateApp, qui a suggéré d'ajouter le signe +, forçant JavaScript à utiliser la distribution implicite de Number.
la source
parseInt('str'*1)
parseInt
à quelque chose qui est déjà un numéro? Cela entraînera une nouvelle conversion en chaîne uniquement pour la convertir à nouveau en nombre.De cette façon, pourquoi ne pas écrire une fonction et l'appeler là où vous en avez besoin. Je suppose que c'est l'entrée dans les champs du formulaire pour effectuer des calculs.
qu'est-ce qui ne va pas?
la source
NaN
.Voici une méthode tryParseInt que j'utilise, elle prend la valeur par défaut comme deuxième paramètre afin qu'elle puisse être tout ce dont vous avez besoin.
la source
une fonction d'aide qui permet toujours d'utiliser le radix
la source
Vous pouvez avoir du code très propre, j'ai eu des problèmes similaires et je l'ai résolu en utilisant:
la source
Pour les autres personnes à la recherche de cette solution, utilisez simplement: ~~ sans parseInt, c'est le mode le plus propre.
Si NaN, il renverra 0 à la place.
la source