Respuestas:
Estuviste cerca:
if (typeof a_string === 'string') {
// this is a string
}
En una nota relacionada: la comprobación anterior no funcionará si se crea una cadena new String('hello')
como el tipo será en su Object
lugar. Hay soluciones complicadas para evitar esto, pero es mejor evitar crear cadenas de esa manera, siempre.
if(typeof(str) === typeof(String()))
El typeof
operador no es un infijo (por lo que el LHS de su ejemplo no tiene sentido).
Necesitas usarlo así ...
if (typeof a_string == 'string') {
// This is a string.
}
Recuerde, typeof
es un operador, no una función. A pesar de esto, verás que typeof(var)
se usa mucho en la naturaleza. Esto tiene tanto sentido como var a = 4 + (1)
.
Además, también puede usar ==
(operador de comparación de igualdad) ya que ambos operandos son String
s ( typeof
siempre devuelve a String
), JavaScript está definido para realizar los mismos pasos que yo había usado ===
(operador de comparación estricto).
Como menciona Box9 , esto no detectará un String
objeto instanciado .
Puedes detectar eso con ...
var isString = str instanceof String;
jsFiddle .
...o...
var isString = str.constructor == String;
jsFiddle .
Pero esto no funcionará en un window
entorno múltiple (piense iframe
).
Puedes evitar esto con ...
var isString = Object.prototype.toString.call(str) == '[object String]';
jsFiddle .
Pero de nuevo, (como menciona Box9 ), es mejor que solo use el String
formato literal , por ejemplo var str = 'I am a string';
.
if(myVar.toUpperCase) alert('I am a string');
:? Ver: jsfiddle.net/tb3t4nsx
{ toUpperCase: '' }
La siguiente expresión devuelve verdadero :
'qwe'.constructor === String
La siguiente expresión devuelve verdadero :
typeof 'qwe' === 'string'
La siguiente expresión devuelve falso (sic!):
typeof new String('qwe') === 'string'
La siguiente expresión devuelve verdadero :
typeof new String('qwe').valueOf() === 'string'
La mejor y correcta manera (en mi humilde opinión ):
if (someVariable.constructor === String) {
...
}
Hoy en día creo que es preferible usar una forma de función typeof () así que ...
if(filename === undefined || typeof(filename) !== "string" || filename === "") {
console.log("no filename aborted.");
return;
}
typeof
, solo estás controlando el orden de las operaciones con esos paréntesis. Algunas personas pueden encontrarlo más legible en ciertas circunstancias.
filename
solo agrupan una sola declaración y, por lo tanto, son inútiles y extraños. Es bueno que esta respuesta tenga un puntaje de 0 porque es incorrecta, engañosa e inútil; Sería mejor si tuviera un puntaje negativo.
verificar nulo o indefinido en todos los casos a_string
if (a_string && typeof a_string === 'string') {
// this is a string and it is not null or undefined.
}
typeof null
y typeof undefined
nunca volverá 'string'
, así que typeof a_string
es suficiente. Lo siento por necroposting
Mi enfoque personal, que parece funcionar para todos los casos, es probar la presencia de miembros que solo estarán presentes para las cadenas.
function isString(x) {
return (typeof x == 'string' || typeof x == 'object' && x.toUpperCase && x.substr && x.charAt && x.trim && x.replace ? true : false);
}
Ver: http://jsfiddle.net/x75uy0o6/
Me gustaría saber si este método tiene fallas, pero me ha servido durante años.