Vérification de type string en JavaScript : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

« Est-ce une chaîne ? » — la question qui hante chaque développeur JavaScript

\n\n

Vous écrivez du code, et soudain vous vous arrêtez. La variable devrait contenir une chaîne, mais et si un null s'y est glissé ? Ou un nombre ? Ou, pire encore, undefined ?

\n\n

Ça vous parle ? Si oui, vous n'êtes pas seul. La question « Check if a variable is a string in JavaScript » est l'une des plus populaires sur Stack Overflow avec des dizaines de milliers de vues. Et ce n'est pas un hasard : JavaScript est un langage à typage dynamique, et les erreurs liées aux types arrivent même aux développeurs expérimentés.

\n\n

Dans cet article, nous allons passer en revue toutes les méthodes possibles pour vérifier si une variable est une chaîne de caractères. Vous apprendrez :

\n
    \n
  • Pourquoi typeof est votre meilleur ami (mais pas toujours)
  • \n
  • Quand instanceof vous laisse tomber
  • \n
  • Comment fonctionne la méthode « sniper » Object.prototype.toString
  • \n
  • Et que faire si vous utilisez des bibliothèques
  • \n
\n\n

C'est parti ! 🚀

\n\n

Méthode n°1 : typeof — le grand classique

\n\n

La méthode la plus simple et la plus rapide est l'opérateur typeof. Il retourne une chaîne avec le nom du type :

\n\n
const name = "Alice";\nconst age = 25;\nconst isAdmin = true;\n\nconsole.log(typeof name);    // "string"\nconsole.log(typeof age);     // "number"\nconsole.log(typeof isAdmin); // "boolean"
\n\n

La vérification pour une chaîne ressemble à ceci :

\n\n
if (typeof variable === "string") {\n  console.log("Oui, c'est une chaîne !");\n}
\n\n

Avantages :

\n
    \n
  • Fonctionne rapidement
  • \n
  • Ne nécessite pas d'import
  • \n
  • Lisible
  • \n
\n\n

Inconvénients :

\n
    \n
  • Ne fait pas la différence entre la primitive "chaîne" et l'objet new String("chaîne")
  • \n
  • Pour null, retourne "object" (erreur historique de JavaScript)
  • \n
\n\n

D'ailleurs, à propos de null — c'est un bug connu du langage qui ne sera pas corrigé pour ne pas casser les anciens sites. Donc typeof null === "object" est normal.

\n\n

Et qu'en est-il de new String() ?

\n\n

En JavaScript, il existe deux types de chaînes : les primitives (normales) et les objets (créés avec new String()). En pratique, vous n'utiliserez presque jamais new String(), mais il est bon de le savoir :

\n\n
const primitiveString = "Bonjour";\nconst objectString = new String("Bonjour");\n\nconsole.log(typeof primitiveString); // "string"\nconsole.log(typeof objectString);    // "object"
\n\n

Si dans votre code, quelqu'un (ou quelque chose) passe une chaîne objet, typeof vous trompera. Mais ne vous inquiétez pas : dans les projets réels, cela arrive rarement.

\n\n

Méthode n°2 : instanceof — pour les chaînes objets

\n\n

L'opérateur instanceof vérifie si un objet est une instance d'une classe spécifique :

\n\n
const str = new String("Test");\nconsole.log(str instanceof String); // true\n\nconst str2 = "Test";\nconsole.log(str2 instanceof String); // false — car c'est une primitive
\n\n

Comme vous le voyez, instanceof ne fonctionne pas avec les chaînes primitives. C'est pourquoi on l'utilise rarement — seulement si vous savez précisément que vous travaillez avec des objets.

\n\n

Quand peut-il être utile ? Si vous écrivez une bibliothèque qui accepte à la fois des primitives et des objets. Mais dans 99% des cas, typeof suffira.

\n\n

Méthode n°3 : Object.prototype.toString.call() — le soldat universel

\n\n

Cette méthode est un véritable sniper. Elle fonctionne pour tous les types de données et ne se trompe jamais :

\n\n
function isString(value) {\n  return Object.prototype.toString.call(value) === "[object String]";\n}\n\nconsole.log(isString("Bonjour"));        // true\nconsole.log(isString(new String("Bonjour"))); // true\nconsole.log(isString(123));             // false\nconsole.log(isString(null));            // false\nconsole.log(isString(undefined));       // false
\n\n

Blogs

Book Recommendations