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
}
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.
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 String
s (typeof
always 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 iframe
s).
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';
.
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]'
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;
}
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) {
...
}
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.
}