2011-08-12 23 views
9

que tienen una función javscript (en realidad un plugin de jQuery), que me va a querer llamar, ya sea como¿Cómo distingo la diferencia entre el objeto y la cadena en javascript?

myFunction("some input"); 

o

myFunction({ "prop": "value 1", "prop2": "value2" }); 

¿Cómo, en la función, diferenciar entre los dos?

En otras palabras, lo que debe ir en las if condiciones siguientes?

if (/* the input is a string */) 
{ 
    // Handle string case (first of above) 
} 
else if (/* the input is an object */) 
{ 
    // Handle object case (second of above) 
} 
else 
{ 
    // Handle invalid input format 
} 

Tengo jQuery a mi disposición.

Actualización: Como se señala en la respuesta, si la entrada es new String('some string'), typeof(input) volverá 'object'. ¿Cómo pruebo para new String(''), entonces puedo manejar eso de la misma manera que ''?

+0

Si es suficiente para usted, puede usar 'jQuery.isPlainObject': http://api.jquery.com/jQuery.isPlainObject/ –

Respuesta

12

jQuery.type puede ser interesante para usted.

if($.type(input)==='string') 
{ 
    //it's a string 
} 
+0

Esto parece solucionar todas las advertencias mencionadas en otras respuestas, al menos por ahora. –

3

El operador typeof puede obtener lo que necesita. es decir:

typeof(myobj) == 'string' 

(IIRC)

29
if(typeof input === 'string') { 
    // input is a string 
} 
else if(typeof input === 'object') { 
    // input is an object 
} 
else { 
    // input is something else 
} 

Tenga en cuenta que typeof estima, además, matrices y nulos a ser objetos:

typeof null === 'object' 
typeof [ 1, 2 ] === 'object' 

Si la distinción es importante (que sólo quieren "real" objetos):

if(typeof input === 'string') { 
    // input is a string 
} 
else if(input && typeof input === 'object' && !(input instanceof Array)) { 
    // input is an object 
} 
else { 
    // input is something else 
} 
+0

+1 para la nota sobre' input! = Null', aunque I ' No estoy seguro de que tenga que importarme en este caso. ¿Qué devuelve 'undefined'? –

+0

'typeof doesntExist == 'undefined'', aunque puedes hacer' if (input == undefined) ' – JJJ

+0

True - Estaba haciendo círculos extraños en mi cabeza: P –

0

En javascript, el comando typeof devuelve el tipo de la variable.

he creado un poco jsfiddle Parece que los rendimientos de matriz también TypeOf como un objeto.

0

Usted puede utilizar la función typeof:

if (typeof(myvar) === 'string') { 
    // the code 
} 

ver here para más información

2

Usted puede;

function f(a) { print(typeof a) } 

f({"prop": "value 1", "prop2": "value2" }); 

>>object 

f("Some input"); 

>>string 
4

Como han dicho otros, el operador typeof determinará el tipo de la variable.

Sin embargo, Aviso:

var str = 'A String' ; 
var obj = new String(str) ; 
console.log(typeof str) ; 
console.log(typeof obj) ; 

// Outputs: 
// string 
// object 
+0

Gracias por el aviso. ¿Hay alguna manera de obtener "string" de 'new String (str)' también? –

+1

+1, es necesario tener en cuenta las cadenas encuadradas. Una forma de solucionar esto es buscar un método que sepa que solo pertenece a las cadenas, ej. 'if (some_var.substring! == undefined) {...}' –

+0

O 'x instanceof String' con la salvedad de la herencia del prototipo –

0

que desea utilizar $.type, ya que es más preciso que typeof

$.fn.plugin = function(options) { 

    console.log($.type(options)); 

    if($.type(options) == 'string') { 
     // Handle string case (first of above) 
    } 
    else if($.type(options) == 'object' && options != null) { 
     // Handle object case (second of above) 
    } 
    else { 
     // Handle invalid input format 

    } 

}; 

$("#d1").plugin(new String('test')); //string 
$("#d1").plugin('test'); //string 
$("#d1").plugin({'key' : 'value'}); //object 

demostración here

Editar

Además, si las opciones no se establece a continuación, !options habría suficiente

Cuestiones relacionadas