docs/reference/compat/predicate/isSymbol.md
::: warning Use typeof operator instead
This isSymbol function is complex due to Symbol object wrapper handling.
Use the simpler and more modern typeof value === 'symbol' instead.
:::
Checks if a value is a symbol.
const result = isSymbol(value);
isSymbol(value)Use isSymbol when you want to type-safely check if a value is a symbol. It checks both primitive symbols and Symbol object wrappers. It also works as a type guard in TypeScript.
import { isSymbol } from 'es-toolkit/compat';
// Primitive symbols
isSymbol(Symbol('test')); // true
isSymbol(Symbol.for('global')); // true
isSymbol(Symbol.iterator); // true
// Symbol object wrappers
isSymbol(Object(Symbol('test'))); // true
// Other types return false
isSymbol('symbol'); // false
isSymbol(123); // false
isSymbol(true); // false
isSymbol(null); // false
isSymbol(undefined); // false
isSymbol({}); // false
isSymbol([]); // false
It also correctly recognizes various built-in symbols.
import { isSymbol } from 'es-toolkit/compat';
// Well-known symbols
isSymbol(Symbol.iterator); // true
isSymbol(Symbol.asyncIterator); // true
isSymbol(Symbol.toStringTag); // true
isSymbol(Symbol.hasInstance); // true
isSymbol(Symbol.toPrimitive); // true
// Global symbols
isSymbol(Symbol.for('myGlobalSymbol')); // true
// Custom symbols
const mySymbol = Symbol('mySymbol');
isSymbol(mySymbol); // true
value (unknown): The value to check if it's a symbol.(value is symbol): Returns true if the value is a symbol, false otherwise.