Respostas:
Você estava perto:
if (typeof a_string === 'string') {
// this is a string
}
Em uma nota relacionada: a verificação acima não funcionará se uma string for criada com new String('hello')
o tipo em Object
vez disso. Existem soluções complicadas para contornar isso, mas é melhor evitar criar strings dessa maneira, sempre.
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 ...
if (typeof a_string == 'string') {
// This is a string.
}
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 quanto var a = 4 + (1)
.
Além disso, você também pode usar ==
(operador de comparação de igualdade), já que os dois operandos são String
s ( typeof
sempre retorna a String
), 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 ....
var isString = str instanceof String;
jsFiddle .
...ou...
var isString = str.constructor == String;
jsFiddle .
Mas isso não funcionará em um window
ambiente múltiplo (pense iframe
).
Você pode contornar isso com ...
var isString = Object.prototype.toString.call(str) == '[object String]';
jsFiddle .
Mas, novamente (como o Box9 menciona ), é melhor você usar apenas o String
formato literal , por exemplo var str = 'I am a string';
.
if(myVar.toUpperCase) alert('I am a string');
:? Veja: jsfiddle.net/tb3t4nsx
{ toUpperCase: '' }
A expressão a seguir retorna true :
'qwe'.constructor === String
A expressão a seguir retorna true :
typeof 'qwe' === 'string'
A expressão a seguir retorna false (sic!):
typeof new String('qwe') === 'string'
A expressão a seguir retorna true :
typeof new String('qwe').valueOf() === 'string'
Melhor e melhor caminho ( imho ):
if (someVariable.constructor === String) {
...
}
Hoje em dia, acredito que é preferível usar uma função de typeof (), então ...
if(filename === undefined || typeof(filename) !== "string" || filename === "") {
console.log("no filename aborted.");
return;
}
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
if (a_string && typeof a_string === 'string') {
// this is a string and it is not null or undefined.
}
typeof null
e typeof undefined
nunca voltará 'string'
, então typeof a_string
é o suficiente. Desculpe por necroposting
Minha abordagem pessoal, que parece funcionar para todos os casos, é testar a presença de membros que estarão presentes apenas para strings.
function isString(x) {
return (typeof x == 'string' || typeof x == 'object' && x.toUpperCase && x.substr && x.charAt && x.trim && x.replace ? true : false);
}
Veja: http://jsfiddle.net/x75uy0o6/
Gostaria de saber se esse método tem falhas, mas me serviu bem por anos.