418 votes

Vérifier si la variable est le nombre ou une chaîne de caractères en javascript

Quelqu'un sait-il comment puis-je vérifier si une variable est un nombre ou une chaîne de caractères en javascript?

405voto

Jonathan Sampson Points 121800

Si vous faites affaire avec la notation littérale, et de ne pas les constructeurs, vous pouvez utiliser typeof:.

typeof "Hello World"; // string
typeof 123;           // number

Si vous êtes en train de créer des nombres et des chaînes par l'intermédiaire d'un constructeur, var foo = new String("foo"), vous devez garder à l'esprit que, typeof peut renvoyer object pour foo.

Peut-être un plus infaillible méthode de contrôle de ce type serait d'utiliser la méthode trouvée dans underscore.js (annoté de la source peut être trouvé ici),

var toString = Object.prototype.toString;

_.isString = function (obj) {
  return toString.call(obj) == '[object String]';
}

Cela renvoie un booléen true pour les éléments suivants:

_.isString("Jonathan"); // true
_.isString(new String("Jonathan")); // true

179voto

BitOfUniverse Points 2516

La meilleure façon de le faire est d'utiliser isNaN + type de casting:

Mise à jour de tous-dans la méthode:

function isNumber(obj) { return !isNaN(parseFloat(obj)) }

Même en utilisant les regex:

function isNumber(n) { return /^-?[\d.]+(?:e-?\d+)?$/.test(n); } 

------------------------

isNumber ('123'); // true  
isNumber (5); // true  
isNumber ('q345'); // false
isNumber(null); // false
isNumber(undefined); // false
isNumber(false); // false
isNumber('   '); // false

EDIT:

Dans le cas où vous avez besoin de manipuler null valeurs:

function isNumber (o) {
  return ! isNaN (o-0) && o != null;
}

EDIT2 (mis à jour) : Dans le cas où vous avez besoin de manipuler null et la chaîne vide:

function isNumber (o) {
  return ! isNaN (o-0) && o !== null && o !== "" && o !== false;
}

isNumber (''); // false

72voto

Alokito Points 656

La meilleure façon que j'ai trouvé est de rechercher une méthode sur la chaîne, c'est à dire:

if (x.substring) {
// do string thing
} else{
// do other thing
}

ou si vous voulez faire quelque chose avec le numéro de vérifier un certain nombre de biens,

if (x.toFixed) {
// do number thing
} else {
// do other thing
}

C'est une sorte de "duck typing", c'est à vous de quelle manière la plus logique. Je n'ai pas assez de karma, de commenter, mais typeof échoue pour en boîte des chaînes et des nombres, c'est à dire:

alert(typeof new String('Hello World'));
alert(typeof new Number(5));

l'alerte "objet".

27voto

snorbi Points 666

Vérifier si la valeur est un littéral de chaîne ou la Chaîne de l'objet:

function isString(o) {
    return typeof o == "string" || (typeof o == "object" && o.constructor === String);
}

Unité de test:

function assertTrue(value, message) {
    if (!value) {
        alert("Assertion error: " + message);
    }
}

function assertFalse(value, message)
{
    assertTrue(!value, message);
}

assertTrue(isString("string literal"), "number literal");
assertTrue(isString(new String("String object")), "String object");
assertFalse(isString(1), "number literal");
assertFalse(isString(true), "boolean literal");
assertFalse(isString({}), "object");

Vérifier si un nombre est similaire:

function isNumber(o) {
    return typeof o == "number" || (typeof o == "object" && o.constructor === Number);
}

22voto

Jakob Gade Points 6006

Vous êtes à la recherche pour isNaN():

<script type="text/javascript">
  alert(isNaN(123));
  alert(isNaN(-1.23));
  alert(isNaN(5-2));
  alert(isNaN(0));
  alert(isNaN("Hello"));
  alert(isNaN("2005/12/12"));
</script>

Voir JavaScript isNaN() Fonction au MDN.

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: