2010-05-09 18 views
54

En JavaScript typeof es un operador y una función. ¿Se usa mejor como operador o función? ¿Por qué?typeof es un operador y una función

+2

Un poco fuera de tema: en realidad, es raro que use 'typeof' estos días. AFAIK, 'typeof' es más lento que una verificación directa, ya que necesita verificar muchos tipos diferentes para devolver una cadena. Por lo tanto, siempre busco el constructor (si es posible), como 'if ((" hello "). Constructor == String) {...}' –

+2

@Sune Rasmussen - Del perfil limitado que acabo de hacer, el la comprobación del constructor en Firefox 3.6 es dos veces más lenta que 'typeof'. Tuve un 'var func = function() {};' y luego hice tanto una función 'typeof func! =' 'Check '' como una comprobación' func.constructor! = Function'. El primero fue dos veces más rápido. – JulianR

+0

Si usa jQuery, el tiempo de ejecución de 'typeof' es insignificante. –

Respuesta

165

typeof es un operador. Se puede comprobar fácilmente usando:

typeof(typeof) 

Fueron typeof una función, esta expresión volvería 'function' cadena, pero el resultado es un error de sintaxis:

js> typeof(typeof); 
typein:8: SyntaxError: syntax error: 
typein:8: typeof(typeof); 
typein:8: .............^ 

así, typeof no puede ser una función. Probablemente, la notación entre paréntesis typeof(foo) hizo pensar que typeof es una función, pero sintácticamente, esos paréntesis no son función llamada - son los que se usan para agrupar, al igual que (2 + 3) *2. De hecho, puede agregar el número que desee:

typeof(((((foo))))); // is equal to typeof foo; 
+3

Tenga en cuenta que esto es cierto para otros operadores: '[] instanceof (Object)'. –

5

creo que elija el que desea basada en la claridad, como un hábito que suelen utilizar como un operador de la siguiente manera porque es bastante claro, al menos IMO:

if(typeof thing === "string") { 
    alert("this is a string"); 
} 

if(typeof thing === "function") { 
    alert("this is a function"); 
} 

Esto se opone a esta formato:

if(typeof(thing) === "string") { 
    alert("this is a string"); 
} 

Lo que para mí, hace que sea un poco más lento de leer. Si lo haces typeof(thing) es lo mismo, así que lo que sea que flote tu bote. You can get a full read and what strings to expect from types here.

+0

Entonces, ¿no se entiende una mejor manera? ¿Existe una guía de estilo de JavaScript? – hekevintran

+0

@hekevintran - No hay una guía de estándares específica para todos, puedes encontrar un marco importante maduro y seguir su estilo tal vez, algo como jQuery o Prototype ... pero nuevamente estos son los estilos de ese equipo, por lo que no es necesariamente el "estándar". –

+0

maldita sea, no estaba al tanto de poder especificar sans "()". –

Cuestiones relacionadas