The `typeof` Operator in JavaScript

Feb 28, 2020

The typeof operator returns the type of a given variable as a string.

typeof 42; // 'number'
typeof 'test'; // 'string'
typeof true; // 'boolean'
typeof (void 0); // 'undefined'
typeof BigInt('1234'); // 'bigint'
typeof Symbol('foo'); // 'symbol'
typeof ({ answer: 42 }); // 'object'
typeof function() {}; // 'function'

// As far as `typeof` is concerned, all objects are the same.
class MyClass {}
typeof (new MyClass()); // 'object'

Here's the general idea: the typeof operator returns which of the 8 JavaScript data types a given value is. There's one key exception to this rule: null.

With null

The one big gotcha with typeof is that typeof null === 'object'. There is a historical reason for this behavior, and a proposal to change this behavior was rejected, so it looks like JavaScript is stuck with this quirk.

The workaround to check whether a value is actually an object with typeof is to check whether the type is 'object' and the value is not strictly equal to null.

function isObject(v) {
  return typeof v === 'object' && v !== null;
}

Error Cases

The typeof operator can throw an error if you use it on a block scope variable before you define it.

// Throws 'ReferenceError: v is not defined'
console.log(typeof v);

let v;

This behavior only applies for block scoped variables. For example, if you don't define v at all, the above script will work fine.

console.log(typeof v); // 'undefined'

//let v;

Block scoped variables are the only case where typeof throws an error. Otherwise, typeof will always succeed.


Did you find this tutorial useful? Say thanks by starring our repo on GitHub!

More Fundamentals Tutorials