Como posso verificar se um var é uma string em JavaScript?
Eu tentei isso e não funciona ...
var a_string = "Hello, I'm a string.";
if (a_string typeof 'string') {
// this is a string
}
javascript
string
variable-types
vitto
fonte
fonte
Respostas:
Você estava perto:
Em uma nota relacionada: a verificação acima não funcionará se uma string for criada com
new String('hello')
o tipo emObject
vez disso. Existem soluções complicadas para contornar isso, mas é melhor evitar criar strings dessa maneira, sempre.fonte
if(typeof(str) === typeof(String()))
O
typeof
operador não é um infixo (portanto, o LHS do seu exemplo não faz sentido).Você precisa usá-lo assim ...
Lembre-se,
typeof
é um operador, não uma função. Apesar disso, você verátypeof(var)
ser muito utilizado na natureza. Isso faz tanto sentido quantovar a = 4 + (1)
.Além disso, você também pode usar
==
(operador de comparação de igualdade), já que os dois operandos sãoString
s (typeof
sempre retorna aString
), o JavaScript é definido para executar as mesmas etapas que eu usei===
(operador de comparação estrita).Como o Box9 menciona , isso não detectará um
String
objeto instanciado .Você pode detectar isso com ....
jsFiddle .
...ou...
jsFiddle .
Mas isso não funcionará em um
window
ambiente múltiplo (penseiframe
).Você pode contornar isso com ...
jsFiddle .
Mas, novamente (como o Box9 menciona ), é melhor você usar apenas o
String
formato literal , por exemplovar str = 'I am a string';
.Leitura adicional .
fonte
if(myVar.toUpperCase) alert('I am a string');
:? Veja: jsfiddle.net/tb3t4nsx{ toUpperCase: '' }
A combinação das respostas anteriores fornece estas soluções:
ou
fonte
A expressão a seguir retorna true :
A expressão a seguir retorna true :
A expressão a seguir retorna false (sic!):
A expressão a seguir retorna true :
Melhor e melhor caminho ( imho ):
fonte
Hoje em dia, acredito que é preferível usar uma função de typeof (), então ...
fonte
typeof
, você está apenas controlando a ordem das operações com esses parênteses. Algumas pessoas podem achar mais legível em determinadas circunstâncias.filename
apenas agrupam uma única declaração e, portanto, são inúteis e estranhos. É bom que esta resposta tenha uma pontuação 0, porque é errada, enganosa e inútil; seria melhor se tivesse uma pontuação negativa.verifique se há nulo ou indefinido em todos os casos a_string
fonte
typeof null
etypeof undefined
nunca voltará'string'
, entãotypeof a_string
é o suficiente. Desculpe por necropostingMinha abordagem pessoal, que parece funcionar para todos os casos, é testar a presença de membros que estarão presentes apenas para strings.
Veja: http://jsfiddle.net/x75uy0o6/
Gostaria de saber se esse método tem falhas, mas me serviu bem por anos.
fonte