2011-02-03 23 views
13

¿Cómo puedo detectar si una variable es una cadena?cómo detectar si la variable es una cadena

+0

Es posible que desee utilizar underscore.js, tiene métodos para esto incorporado en http: //documentcloud.github.com/underscore/# isString - en el caso de isString utiliza el método mencionado por user113716 –

+0

posible duplicado de [Comprobar si una variable es una cadena] (http://stackoverflow.com/questions/4059147/check-if-a- variable-es-una-cadena) – pkyeck

+0

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

30

Esta es la forma especificada en la especificación de ECMAScript para determinar la propiedad interna [[Class]].

if(Object.prototype.toString.call(myvar) == '[object String]') { 
    // a string 
} 

From 8.6.2 Object Internal Properties and Methods:

El valor de la [[Clase]] propiedad interna se define por esta especificación para cada tipo de objeto incorporado. El valor de la propiedad interna [[Class]] de un objeto host puede ser cualquier valor String excepto uno de "Argumentos", "Array", "Boolean", "Fecha", "Error", "Función", "JSON" "," Matemáticas "," Número "," Objeto "," RegExp ", y " Cadena ". El valor de una propiedad interna [[Class]] se usa internamente para distinguir diferentes tipos de objetos. Tenga en cuenta que esta especificación no proporciona ningún medio para que un programa acceda a ese valor, excepto a través de Object.prototype.toString (consulte 15.2.4.2).


Para un ejemplo de cómo esto es útil, considere este ejemplo:

var str = new String('some string'); 

alert(typeof str); // "object" 

alert(Object.prototype.toString.call(str)); // "[object String]" 

Si utiliza typeof, se obtiene "object".

Pero si utiliza el método anterior, obtendrá el resultado correcto "[object String]".

+8

no estoy seguro de por qué esta es la respuesta aceptada. los objetos no son cadenas. 'new String()' da como resultado un objeto que contiene una serie de propiedades indexadas, cada una con un valor correspondiente al carácter en esa posición. Sí, se forzará en una cadena mediante el método 'to'String' de' Object', pero el hecho es que 'new String ('some string')' no es una cadena, en sí misma. 'typeof someString ===" string "' es la forma correcta de determinar si una variable es una cadena. Si una variable puede * convertirse en * una cadena es irrelevante; cada objeto que puede rastrear su cadena de prototipos a 'Objeto' tiene' toString' – jackwanders

16

Puede usar typeof para hacerlo, pero para muchas cosas, este es un mal diseño.

if (typeof myVar == "string") { 
    alert("I'm a string!"); 
} 
+5

¿Qué es un buen diseño? – Webnet

+0

Depende de lo que estás tratando de hacer. Normalmente, debe saber qué tipo está recibiendo o no debería importar (es decir, le hará lo mismo, independientemente del tipo). –

+0

¿qué hay de usar isNaN()? –

0

typeof('yourstring');// returns string

4

Use typeof.

if (typeof foo == 'string') 
+19

Probablemente es más claro no utilizar palabras clave como variables en los ejemplos. – crdx

0

Use alert(typeof "hello"); alert(typeof 123);

Ref .: here.

3
var str = new String("some string"); 
if(str.constructor.name === "String") 
    { 
     alert("I'm a string!"); 
     } 

o simplemente:

if(str.constructor === String) 
    { 
     alert("I'm a string!"); 
     } 
2

No creo que necesitamos para tratar new String('some string') como una cadena, porque si tratamos:

new String('abc')==='abc' 

Se volverá falsa!

Pero si tratamos:

String('abc')==='abc' 

Se devolverá true.

0
('str'.constructor === String) && alert('its a string!'); 
Cuestiones relacionadas