« Est-ce une chaîne ? » — la question qui hante chaque développeur JavaScript
\n\nVous é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 ?
Ç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\nDans 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
typeofest votre meilleur ami (mais pas toujours) \n - Quand
instanceofvous laisse tomber \n - Comment fonctionne la méthode « sniper »
Object.prototype.toString\n - Et que faire si vous utilisez des bibliothèques \n
C'est parti ! 🚀
\n\nMéthode n°1 : typeof — le grand classique
\n\nLa méthode la plus simple et la plus rapide est l'opérateur typeof. Il retourne une chaîne avec le nom du type :
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\nLa vérification pour une chaîne ressemble à ceci :
\n\nif (typeof variable === "string") {\n console.log("Oui, c'est une chaîne !");\n}\n\nAvantages :
\n- \n
- Fonctionne rapidement \n
- Ne nécessite pas d'import \n
- Lisible \n
Inconvénients :
\n- \n
- Ne fait pas la différence entre la primitive
"chaîne"et l'objetnew String("chaîne")\n - Pour
null, retourne"object"(erreur historique de JavaScript) \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.
Et qu'en est-il de new String() ?
\n\nEn 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 :
const primitiveString = "Bonjour";\nconst objectString = new String("Bonjour");\n\nconsole.log(typeof primitiveString); // "string"\nconsole.log(typeof objectString); // "object"\n\nSi 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.
Méthode n°2 : instanceof — pour les chaînes objets
\n\nL'opérateur instanceof vérifie si un objet est une instance d'une classe spécifique :
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\nComme 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.
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.
Méthode n°3 : Object.prototype.toString.call() — le soldat universel
\n\nCette méthode est un véritable sniper. Elle fonctionne pour tous les types de données et ne se trompe jamais :
\n\nfunction 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
Lire aussi