Why does "typeof" not need parentheses?

JavascriptTypeof

Javascript Problem Overview


Is there any difference between typeof (myVariable) compared to typeof myVariable?

Both work, but coming from PHP, I don't understand why this function can use parenthesis or not.

Javascript Solutions


Solution 1 - Javascript

The typeof keyword represents an operator in Javascript programming.

The correct definition for typeof operator in the specification is :

typeof[(]expression[)] ;

This is the reason behind the use of typeof as typeof(expression) or typeof expression.

Coming to why it has been implemented as such is probably to let the developer handle the level of visibility in his code. As such, it is possible to use a clean conditional statement using typeof :

if ( typeof myVar === 'undefined' )
  // ...
;

Or defining a more complex expression using the grouping operator :

const isTrue = (typeof (myVar = anotherVar) !== 'undefined') && (myVar === true);

EDIT :

In some cases, using parentheses with the typeof operator makes the code written less prone to ambiguity.

Take for instance the following expression where the typeof operator is used without parentheses. Would typeof return the type of the result of the concatenation between an empty string literal and a number, or the type of the string literal ?

typeof "" + 42

Looking at the definition of the operator stated above and the precedence of the operators typeof and +, it appears that the previous expression is equivalent to :

typeof("") + 42 // Returns the string `string42`

In this case, using parentheses with typeof would bring more clarity to what you are trying to express :

typeof("" + 42) // Returns the string `string`

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDon PView Question on Stackoverflow
Solution 1 - JavascriptHalim QarroumView Answer on Stackoverflow