tags:

views:

84

answers:

2

In JavaScript typeof is an operator and a function. Is it better used as an operator or a function? Why?

+4  A: 

I think you pick which you want based on clarity, as a habit I usually use it as an operator in the following way because it's pretty clear, at least IMO:

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

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

This is opposed to this format:

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

Which to me, makes it slightly slower to read. If you do typeof(thing) it's the same thing, so whatever floats your boat. You can get a full read and what strings to expect from types here.

Nick Craver
So there is no understood better way? Does there exist a JavaScript style guide?
hekevintran
@hekevintran - There's not a specific standards guide for everyone, you can find a major framework that's mature and follow it's styling perhaps, something like jQuery or Prototype...but again these are the styles of that team, so it's not necessarily the "standard".
Nick Craver
+8  A: 

typeof is an operator. You can easily check it using... typeof operator:

typeof typeof

Were typeof a function, this expression would return 'function' string, but it results in syntax error:

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

so, typeof cannot be a function. Probably parenthesis-notation typeof(foo) made you think typeof is a function, but syntactically, those parenthesis are not function call - they are those used for grouping, just like (2 + 3) *2. In fact, you can add any number of them you want:

typeof(((((foo))))); // is equal to typeof foo;
el.pescado
Thanks for the clear answer.
hekevintran