Check if a Value is a Symbol in JavaScript or Node.js

JavaScript contains the global Symbol object allowing you to create unique symbol values. You may use symbols to add a property to an object that doesn’t collide with other keys because symbols are hidden from the usual access patterns.

This tutorial shows you how to detect whether a given value is a symbol in JavaScript.

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
  38. What Is `Symbol.toStringTag` and How to Use It (Coming soon)
  1. Check if a Value is a Symbol in JavaScript or Node.js

Determine If a Given Value Is a JavaScript Symbol

You can create symbol primitives using the Symbol() function or the static Symbol.for(<key>) method. The difference between both functions is that Symbol always returns a new symbol value. Symbol.for always returns the same symbol value when calling it with the same key.

In your application, you may need to detect whether a given value is a symbol. Here’s a utility function isSymbol that returns true if a given input is a symbol, false otherwise:

/**
 * Determine whether the given `input` is a symbol.
 *
 * @param {*} input
 *
 * @returns {Boolean}
 */
function isSymbol (input) {  
  return Object.prototype.toString.call(input) === '[object Symbol]'
}

isSymbol(Symbol.for('marcus')) // true  
isSymbol(Object(Symbol.for('marcus'))) // true

isSymbol(null) // false  
isSymbol(1234) // false  

This isSymbol method is a mature check for primitive symbol values and also for wrapped symbols.

Be Careful Using “typeof === 'symbol'”

In case you saw a symbol check like typeof val === 'symbol', that’s a valid check for most use cases.

The situation where a typeof check fails is a wrapped symbol. JavaScript supports wrapped symbols using Object(Symbol('marcus')). Using the typeof check would return false for a wrapped symbol instead of true.

Use the @supercharge/strings Package

I’m the maintainer of the @supercharge/strings package providing convenient string utilities. It provides the solid Str.isSymbol method determining whether a given value is a symbol:

const Str = require('@supercharge/strings')

Str.isSymbol(Symbol.for('marcus')) // true  
Str.isSymbol(Object(Symbol.for('marcus'))) // true

Str.isSymbol(null) // false  
Str.isSymbol(1234) // false  

That’s it!


Mentioned Resources

Explore the Library

Find interesting tutorials and solutions for your problems.