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
}
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
}
Réponses:
Vous étiez 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')
comme le type sera à laObject
place. Il existe des solutions compliquées pour contourner ce problème, mais il vaut mieux éviter de créer des chaînes de cette façon, jamais.la source
if(typeof(str) === typeof(String()))
L'
typeof
opérateur n'est pas un infixe (donc la LHS de votre exemple n'a pas de sens).Vous devez l'utiliser comme ça ...
if (typeof a_string == 'string') { // This is a string. }
Souvenez-vous,
typeof
c'est un opérateur, pas une fonction. Malgré cela, vous verreztypeof(var)
être beaucoup utilisé dans la nature. Cela a autant de sens quevar a = 4 + (1)
.Aussi, vous pouvez également utiliser
==
(opérateur de comparaison d'égalité) puisque les deux opérandes sontString
s ( retournetypeof
toujours aString
), JavaScript est défini pour effectuer les mêmes étapes que j'avais utilisé===
(opérateur de comparaison stricte).Comme le mentionne Box9 , cela ne détectera pas un
String
objet instancié .Vous pouvez détecter cela avec ...
var isString = str instanceof String;
jsFiddle .
...ou...
var isString = str.constructor == String;
jsFiddle .
Mais cela ne fonctionnera pas dans un
window
environnement multi (penseziframe
s).Vous pouvez contourner cela avec ...
var isString = Object.prototype.toString.call(str) == '[object String]';
jsFiddle .
Mais encore une fois, (comme le mentionne Box9 ), il vaut mieux utiliser simplement le
String
format littéral , par exemplevar str = 'I am a string';
.Lectures complémentaires .
la source
if(myVar.toUpperCase) alert('I am a string');
:? Voir: jsfiddle.net/tb3t4nsx{ toUpperCase: '' }
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]'
la source
L'expression suivante renvoie true :
'qwe'.constructor === String
L'expression suivante renvoie true :
typeof 'qwe' === 'string'
L'expression suivante renvoie false (sic!):
typeof new String('qwe') === 'string'
L'expression suivante renvoie true :
typeof new String('qwe').valueOf() === 'string'
Meilleure et bonne manière (à mon humble avis ):
if (someVariable.constructor === String) { ... }
la source
Aujourd'hui, je pense qu'il est préférable d'utiliser une forme de fonction de typeof (), donc ...
if(filename === undefined || typeof(filename) !== "string" || filename === "") { console.log("no filename aborted."); return; }
la source
typeof
, vous contrôlez simplement l'ordre des opérations avec ces parenthèses. Certaines personnes peuvent le trouver plus lisible dans certaines circonstances.filename
ne regroupent qu'une seule instruction, et sont donc inutiles et superflues. C'est une bonne chose que cette réponse ait un score de 0 car elle est erronée, trompeuse et inutile; ce serait mieux s'il avait un score négatif.vérifier null ou indéfini dans tous les cas a_string
if (a_string && typeof a_string === 'string') { // this is a string and it is not null or undefined. }
la source
typeof null
ettypeof undefined
ne reviendra jamais'string'
,typeof a_string
c'est assez. Désolé pour le nécropostageMon approche personnelle, qui semble fonctionner pour tous les cas, consiste à tester la présence de membres qui ne seront tous présents que pour les chaînes.
function isString(x) { return (typeof x == 'string' || typeof x == 'object' && x.toUpperCase && x.substr && x.charAt && x.trim && x.replace ? true : false); }
Voir: http://jsfiddle.net/x75uy0o6/
J'aimerais savoir si cette méthode a des défauts, mais elle m'a bien servi pendant des années.
la source