2011-06-08 11 views
128

¿Cómo puedo verificar si una var es una cadena en JavaScript? no la comprobación anterior será:¿Cómo puedo verificar si una var es una cadena en JavaScript?

He intentado esto y no funciona ...

var a_string = "Hello, I'm a string."; 

if (a_string typeof 'string') { 
    // this is a string 
} 
+1

posible duplicado de [Comprobar si la variable es número o cadena en javascript] (http://stackoverflow.com/questions/1303646/check-whether-variable-is-number-or-string-in-javascript) – Flimzy

Respuesta

276

estaban cerca:

if (typeof a_string === 'string') { 
    // this is a string 
} 

En una nota relacionada funciona si se crea una cadena con new String('hello') ya que el tipo será Object en su lugar. Existen soluciones complicadas para evitar esto, pero es mejor evitar crear cadenas de esa manera, siempre.

+1

+1 Box9 es 8 segundos a la cabeza :) – alex

+1

Chicos, realmente les daría una respuesta aceptada a los dos, pero no puedo, todo lo que puedo hacer es +1 a ambos, que dar la respuesta aceptada a quién está más cerca de mi problema específico, que no he explicado completamente. – vitto

+0

Esto no es un control suficiente como se indica a continuación. – Domi

65

El operador typeof no es un infijo (por lo que el LHS de su ejemplo no tiene sentido).

Es necesario utilizarlo como tal ...

if (typeof a_string == 'string') { 
    // This is a string. 
} 

Recuerde, typeof es un operador, no una función. A pesar de esto, verá que typeof(var) se usa mucho en la naturaleza. Esto tiene tanto sentido como var a = 4 + (1).

Además, es posible también utilizar == (operador de comparación de igualdad), ya que ambos operandos son String s (typeofsiempre devuelve una String), JavaScript está definido para llevar a cabo los mismos pasos tenían Solía ​​=== (operador de comparación estricta) .

Como Box9 mentions, este won't detect instancia un objeto String.

Puede detectar para que con ....

var isString = str instanceof String; 

jsFiddle.

... o ...

var isString = str.constructor == String; 

jsFiddle.

Pero esto no funcionará en un entorno multi window (piensa iframe s).

Usted puede evitar esto con ...

var isString = Object.prototype.toString.call(str) == '[object String]'; 

jsFiddle.

Pero, de nuevo, (como Box9 mentions), es mejor que solo utilice el formato literal String, p. var str = 'I am a string';.

Further Reading.

+0

¡Jaja tan cerca! Desafortunadamente no tengo votos para el día. –

+1

@ Box9 No se preocupe, soy representante de todos modos: P – alex

+0

+1 Clave más clara. –

7

La combinación de las respuestas anteriores proporciona estas soluciones:

if (typeof str == 'string' || str instanceof String) 

o

Object.prototype.toString.call(str) == '[object String]' 
-3

Mi enfoque personal, que parece funcionar para todos los casos, está poniendo a prueba la presencia de los miembros que lo hará todo, sólo estar presente para cuerdas.

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 defectos, pero me ha servido bien durante años.

+2

Esto es fácilmente engañado por cualquier objeto viejo que tenga esos métodos. – alex

+5

Esto se conoce como pato-tipado, p. si camina como una cuerda y habla como una cuerda, bien podría ser una cuerda. Estás un poco loco si crees que esta es la mejor manera de probar una cadena, pero Javascript es un Thunderdome, tú lo haces. –

0

Hoy en día creo que es preferible utilizar una forma de función de typeof() así que ...

if(filename === undefined || typeof(filename) !== "string" || filename === "") { 
    console.log("no filename aborted."); 
    return; 
} 
+0

no hay forma de función de 'typeof', solo está controlando el orden de las operaciones con esos paréntesis. Algunas personas pueden encontrarlo más legible en ciertas circunstancias. –

0

cheque por un valor nulo o no definido en todos los casos una_cadena

if (a_string && typeof a_string === 'string') { 
    // this is a string and it is not null or undefined. 
} 
Cuestiones relacionadas