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.


More Fundamentals Tutorials