Check If a Value Is an Object in JavaScript or Node.js

Sometimes you need to check for the type of a variable before moving on with any processing. For example, you may want to validate a value to be an object before merging its properties with another object.

This tutorial shows you how to confidently check whether a given value is a JavaScript object.

Node.js Series Overview

  1. String Replace All Appearances
  2. Remove All Whitespace From a String in JavaScript
  3. Generate a Random ID or String in Node.js or JavaScript
  4. Remove Extra Spaces From a String in JavaScript or Node.js
  5. Remove Numbers From a String in JavaScript or Node.js
  6. Get the Part Before a Character in a String in JavaScript or Node.js
  7. Get the Part After a Character in a String in JavaScript or Node.js
  8. How to Check if a Value is a String in JavaScript or Node.js
  9. Check If a String Includes All Strings in JavaScript/Node.js/TypeScript
  10. Check if a Value is a String in JavaScript and Node.js
  11. Limit and Truncate a String to a Given Length in JavaScript and Node.js
  12. Split a String into a List of Characters in JavaScript and Node.js
  13. How to Generage a UUID in Node.js
  14. Reverse a String in JavaScript or Node.js
  15. Split a String into a List of Lines in JavaScript or Node.js
  16. Split a String into a List of Words in JavaScript or Node.js
  17. Detect if a String is in camelCase Format in Javascript or Node.js
  18. Check If a String Is in Lowercase in JavaScript or Node.js
  19. Check If a String is in Uppercase in JavaScript or Node.js
  20. Get the Part After First Occurrence in a String in JavaScript or Node.js
  21. Get the Part Before First Occurrence in a String in JavaScript or Node.js
  22. Get the Part Before Last Occurrence in a String in JavaScript or Node.js
  23. Get the Part After Last Occurrence in a String in JavaScript or Node.js
  24. How to Count Words in a File
  25. How to Shuffle the Characters of a String in JavaScript or Node.js
  26. Append Characters or Words to a String in JavaScript or Node.js
  27. Check if a String is Empty in JavaScript or Node.js
  28. Ensure a String Ends with a Given Character in JavaScript or Node.js
  29. Left-Trim Characters Off a String in JavaScript or Node.js
  30. Right-Trim Characters Off a String in JavaScript or Node.js
  31. Lowercase the First Character of a String in JavaScript or Node.js
  32. Uppercase the First Character of a String in JavaScript or Node.js
  33. Prepend Characters or Words to a String in JavaScript or Node.js
  34. Check if a String is a Number
  35. Convert a String to Buffer
  36. Prevent Line Breaks in String Template Literals
  37. How to Implement a Custom `toString` Method (Coming soon)
  38. What Is `Symbol.toStringTag` and How to Use It (Coming soon)

Detect Whether a Value Is an Object Using JavaScript

Intuitively, you may think about using JavaScript’s typeof operator when checking whether a given value is an object. But there’s a drawback using typeof: JavaScript treats different types as objects.

For example: an object is an object, an array is an object, a date is an object, null is an object. That means, using typeof requires checks for each special object data type:

typeof { name: 'Future Studio' }  
// 'object'

typeof new Date()  
// 'object'

typeof null  
// 'object'

typeof [1, 2]  
// 'object'

We recommend using the Object.prototype.toString method. This method returns the stringified type identifier. By type identifier, we mean Object, Array, Date, and so on. And the stringified version has a format of [object <type>]. Here are some examples:

Object.prototype.toString.call([1, 2, 3])  
// '[object Array]'

Object.prototype.toString.call('Future Studio')  
// '[object String]'

Object.prototype.toString.call({ name: 'Future Studio' })  
// '[object Object]'

We can now compare the output of Object.prototype.toString against the desired object type. Let’s create a reusable isObject utility function from the observations:

/**
 * Determine whether the given `value` is an object.
 *
 * @param {*} value
 *
 * @returns {value is object}
 */
function isObject (value) {  
  return Object.prototype.toString.call(value) === '[object Object]'
}

You can now use the isObject method like this:

isObject({})  
isObject({ name: 'Future Studio' })  
// true

isObject()  
isObject(null)  
isObject([1, 2])  
isObject(new Date())  
// false

That’s it!

Explore the Library

Find interesting tutorials and solutions for your problems.