web-dev-qa-db-fra.com

Comment puis-je vérifier si une var est une chaîne en JavaScript?

Comment puis-je vérifier si une var est une chaîne en JavaScript?

J'ai essayé ça et ça ne marche pas ...

var a_string = "Hello, I'm a string.";

if (a_string typeof 'string') {
    // this is a string
}
145
vitto

Tu étais proche:

if (typeof a_string === 'string') {
    // this is a string
}

Sur une note connexe: la vérification ci-dessus ne fonctionnera pas si une chaîne est créée avec new String('hello') car le type sera Object à la place. Il existe des solutions compliquées pour contourner ce problème, mais il est préférable de ne jamais créer de chaînes de cette façon.

322
David Tang

L'opérateur typeof n'est pas un infixe (le LHS de votre exemple n'a donc aucun sens).

Vous devez l'utiliser comme si ...

if (typeof a_string == 'string') {
    // This is a string.
}

Rappelez-vous que typeof est un opérateur, pas une fonction. Malgré cela, vous verrez que typeof(var) est utilisé beaucoup dans la nature. Cela a autant de sens que var a = 4 + (1).

De même, vous pouvez également utiliser == (opérateur de comparaison d'égalité) puisque les deux opérandes sont Strings (typeofalways renvoie une String), JavaScript est défini pour exécuter les mêmes étapes que si j'avais utilisé === (opérateur de comparaison strict).

Comme Box9 mentionne , ceci ne détectera pas un objet String instancié. 

Vous pouvez détecter pour cela avec ....

var isString = str instanceof String;

jsFiddle .

...ou...

var isString = str.constructor == String;

jsFiddle .

Mais cela ne fonctionnera pas dans un environnement multi window (pensez iframes).

Vous pouvez contourner cela avec ...

var isString = Object.prototype.toString.call(str) == '[object String]';

jsFiddle .

Mais encore une fois, (comme Box9 mentionne ), il vaut mieux utiliser le format littéral String, par exemple. var str = 'I am a string';.

Lectures supplémentaires .

67
alex

La combinaison des réponses précédentes fournit ces solutions:

if (typeof str == 'string' || str instanceof String)

ou 

Object.prototype.toString.call(str) == '[object String]'
9
Alf Eaton

De nos jours, je pense qu'il est préférable d'utiliser une forme de fonction de typeof () alors ...

if(filename === undefined || typeof(filename) !== "string" || filename === "") {
   console.log("no filename aborted.");
   return;
}
0
Master James

L'expression suivante renvoie true :

'qwe'.constructor === String

L'expression suivante renvoie true :

typeof 'qwe' === 'string'

L'expression suivante retourne false (sic!):

typeof new String('qwe') === 'string'

L'expression suivante renvoie true :

typeof new String('qwe').valueOf() === 'string'

Meilleure et bonne manière ( imho ):

if (someVariable.constructor === String) {
   ...
}
0
redisko

vérifie la valeur null ou undefined dans tous les cas

if (a_string && typeof a_string === 'string') {
    // this is a string and it is not null or undefined.
}
0
Kurkula