For DevelopersFebruary 05, 2025

JavaScript Type Checking: How to Check Variable Types with Examples

Explore JavaScript type checking methods with examples to avoid errors and write more reliable code.

Type checking is an important concept in JavaScript. It helps you to understand the kind of data you are working with. JavaScript is a loosely-typed language, which means variables can hold any type of value at any time. This flexibility can sometimes lead to bugs, so type checking can save time by avoiding errors.

In this blog, we will discuss the common methods to check variable types in JavaScript with examples. We will also include their strengths, weaknesses, and the scenarios where they are most useful.

Join Index.dev to work on top JavaScript projects with global companies—build your remote career today!

 

Why Type-Checking Matters?

Imagine you have a variable called data, but you do not know if it is a number, string, or array. Performing the wrong operations on it can cause your code to fail. For example:

JavaScript

let data = "123";
console.log(data * 2); // Output: 246 (works fine, as string converts to number)

data = "hello";
console.log(data * 2); // Output: NaN (error: not a number)

To avoid such problems, you can use type-checking methods to ensure your code works correctly. This is especially important in large projects where you may not always know what type of value is stored in a variable.

Read More: How to Check if a Variable is Undefined in JavaScript

 

1. Using the typeof Operator

The typeof operator is the easiest way to check the type of a variable. It works for primitive types and some objects. Here is how it works:

JavaScript

console.log(typeof 42);           // "number"
console.log(typeof 'hello');      // "string"
console.log(typeof true);         // "boolean"
console.log(typeof undefined);    // "undefined"
console.log(typeof null);         // "object" (this is a JavaScript quirk)
console.log(typeof {});           // "object"
console.log(typeof []);           // "object"
console.log(typeof function(){}); // "function"

Strengths:

  • Simple and quick.
  • Ideal for checking primitive types.

Weaknesses:

  • Cannot distinguish arrays from objects (both return "object").
  • Identifies null as "object", which is an old design flaw in JavaScript.

Best Use Cases:

  • Use typeof when working with basic data types like numbers, strings, or booleans.

 

2. Using instanceof Operator

The instanceof operator checks if an object belongs to a specific class or constructor. It is helpful for identifying arrays, functions, and custom objects.

JavaScript

console.log([] instanceof Array);           // true
console.log({} instanceof Object);          // true
console.log(function(){} instanceof Function); // true
console.log("hello" instanceof String);    // false (primitive strings are not objects)

Strengths:

  • Works well for objects created by specific constructors.
  • Useful for distinguishing between different object types (e.g., arrays vs. objects).

Weaknesses:

  • Does not work with primitive types.
  • May fail across execution contexts (e.g., if the object is created in an iframe).

Best Use Cases:

  • Use instanceof to check for specific object types, like arrays, functions, or instances of custom classes.

 

3. Using Array.isArray

To specifically check if a variable is an array, JavaScript provides the Array.isArray method. This is the most reliable way to identify arrays.

JavaScript

let arr = [1, 2, 3];
console.log(Array.isArray(arr)); // true

let obj = { a: 1 };
console.log(Array.isArray(obj)); // false

Strengths:

  • Designed explicitly for arrays.
  • Works reliably across execution contexts.

Weaknesses:

  • Only checks for arrays; does not help with other types.

Best Use Cases:

  • Always use Array.isArray when you need to check if a variable is an array.

Learn more about Array.isArray on MDN.

 

4. Using Object.prototype.toString

A more advanced method for type checking is using Object.prototype.toString. It works for all types and is reliable across execution contexts.

JavaScript

function getType(value) {
  return Object.prototype.toString.call(value);
}

console.log(getType(42));            // "[object Number]"
console.log(getType('hello'));       // "[object String]"
console.log(getType([]));            // "[object Array]"
console.log(getType({}));            // "[object Object]"
console.log(getType(null));          // "[object Null]"
console.log(getType(undefined));     // "[object Undefined]"
console.log(getType(function(){}));  // "[object Function]"

Strengths:

  • Works for all types, including null and arrays.
  • Reliable even across different execution contexts.

Weaknesses:

  • Slightly more complex to use compared to typeof or instanceof.

Best Use Cases:

  • Use this method when precise type checking is required, especially in complex or cross-context applications.

 

5. Using the constructor Property

Another way to check the type of an object is by checking its constructor property. This property refers to the constructor function that created the object.

JavaScript

console.log((42).constructor === Number);     // true
console.log('hello'.constructor === String);  // true
console.log([].constructor === Array);        // true
console.log({}.constructor === Object);       // true

Strengths:

  • Simple and readable for object types.

Weaknesses:

  • Can be unreliable if the constructor property is manually altered.

Best Use Cases:

  • Use this method for quick checks when you trust the integrity of the constructor property.

Explore More: How to Use Sleep, Wait, and Delay in JavaScript

 

Combining Methods for Robust Type Checking

For real-world applications, you may need to combine methods to achieve robust type checking. For example:

JavaScript

function checkType(value) {
  if (Array.isArray(value)) {
    return 'array';
  } else if (value === null) {
    return 'null';
  } else if (typeof value === 'object') {
    return 'object';
  } else {
    return typeof value;
  }
}

console.log(checkType(42));         // "number"
console.log(checkType('hello'));    // "string"
console.log(checkType([]));         // "array"
console.log(checkType(null));       // "null"
console.log(checkType({}));         // "object"

 

Final Thoughts

Understanding how to check variable types in JavaScript is essential for writing bug-free code. Each method has its own strengths and weaknesses, so choose the right one based on your use case. Combining methods can help you handle edge cases and ensure your code works as expected.

For further reading, explore these resources:

Share

Ali MojaharAli MojaharSEO Specialist

Related Articles

For EmployersHow Enterprise Engineering Teams Are Structured (Data Study)
Tech HiringInsights
This listicle roundup explains how enterprise engineering teams are structured using real data. It covers leadership models, team size, role ratios, and how companies scale with small teams. It also shows how structure, ownership, and internal tools help improve speed, productivity, and delivery.
Eugene GarlaEugene GarlaVP of Talent
For EmployersHow AI-Native Software Is Changing Every Industry
Software DevelopmentArtificial Intelligence
AI-native apps are software products built with artificial intelligence at their core, where AI drives logic, user experience, and decision-making. From healthcare to finance, they learn, adapt, and improve continuously, delivering faster, smarter, and more secure experiences.
Eugene GarlaEugene GarlaVP of Talent