This page looks best with JavaScript enabled

Javascript `typeof` issues and what to do about them

 ·   ·  ☕ 2 min read

typeof is useful but has inherent issues. There are gaps between what a developer expects in terms of consistency and what typeof delivers.

Let us look at a few examples -

1
2
const i = 1;
console.log(typeof i); // number

typeof is a unary operator, and does not require brackets. If you indeed put the brackets around the input, they just group the input and nothing more.

More examples -

1
2
3
4
5
6
7
console.log(typeof (1 + 2)); // number
console.log(typeof ""); // string
console.log(typeof undefined); // undefined
console.log(typeof { fruit: "apple" }); // object
console.log(typeof ["apple"]); // object
console.log(typeof new Date()); // object
console.log(typeof null); // object

You may observe that -

  • Null indicated as an object is downright dangerous
  • typeof against objects is just object - this is not helpful

There are two options -

  • just live with typeof for now. After all checking types in Javascript is not critical :).
  • do something else

Nothing works out and type is a do-or-die - choose Typescript.

What’s the Alternative?

Simple, really.

1
Object.prototype.toString.call(`variable`);

Repeating the same examples from the above code block.

1
2
3
4
5
6
7
console.log(Object.prototype.toString.call(1 + 2)); // [object Number]
console.log(Object.prototype.toString.call("")); // [object String]
console.log(Object.prototype.toString.call(undefined)); // [object Undefined]
console.log(Object.prototype.toString.call({ fruit: "apple" })); // [object Object]
console.log(Object.prototype.toString.call(["apple"])); // [object Array]
console.log(Object.prototype.toString.call(new Date())); // [object Date]
console.log(Object.prototype.toString.call(null)); // [object Null]

Related posts that may be of interest -

Stay in touch!
Share on

Prashanth Krishnamurthy
WRITTEN BY
Prashanth Krishnamurthy
Technologist | Creator of Things