How to Check if a Variable is a String in JavaScript

To check if a variable is a string in JavaScript, use the typeof operator, i.e., if (typeof variable === 'string'). If the typeof variable returns 'string', then the variable is a string. Otherwise, it is not a string.

For example:

JavaScript
const variable = 'Coding Beauty'; if (typeof variable === 'string') { // 👇 this runs console.log('Variable is string'); } else { console.log('Variable is not string'); }

The typeof operator returns a string that indicates the type of its operand. For primitives, it returns the exact type, e.g., 'number', 'boolean', 'string', etc, for functions, it returns ‘function‘, and for complex or user-defined types, it returns 'object'.

JavaScript
console.log(typeof true); // 'boolean' console.log(typeof 'Coding Beauty'); // 'string' console.log(typeof 100); // 'number' console.log(typeof new Promise(() => {})); // 'object' console.log(typeof function () {}); // 'function' console.log(typeof Symbol()); // 'symbol' console.log(typeof (() => {})); // 'function' console.log(typeof []); // 'object' console.log(typeof {}); // 'object' console.log(typeof undefined); // 'undefined'

typeof undeclared_variable is 'undefined'?

Note that if you mistakenly use typeof on a variable that hasn’t been declared, typeof will not throw an error:

JavaScript
if (typeof undeclared === 'string') { console.log('Variable is string'); } else { console.log('Variable is NOT string'); }

When used on variables that haven’t been declared, typeof returns the string 'undefined':

JavaScript
console.log(typeof undeclared); // 'undefined'

typeof for string wrapper objects

The one instance where typeof won’t work is when the string was created as a wrapper object i.e., using the String() constructor with the new operator.

For such strings, it will return the 'object' string, instead of 'string'.

JavaScript
const strObj = new String('Coding Beauty'); console.log(typeof strObj); // 'object'

However, it’s not a good practice to use wrapper objects, as they serve no use. Wrapper objects are only used internally; when JavaScript auto-boxes a primitive value into an object to access a property on that object.

typeof null is 'object'?

Note that when typeof is used on the null value, it returns the string 'object'

JavaScript
console.log(typeof null) // 'object'

This is because, as stated in the MDN documentation:

In the first implementation of JavaScript, JavaScript values were represented as a type tag and a value. The type tag for objects was 0null was represented as the NULL pointer (0x00 in most platforms). Consequently, null had 0 as type tag, hence the typeof return value "object". (reference)

A fix was proposed for ECMAScript (via an opt-in), but was rejected. It would have resulted in typeof null === "null".

typeof NaN is 'number'?

Also, typeof NaN results in 'number':

JavaScript
console.log(typeof NaN); // 'number'

Because as stated in this StackOverflow answer and the spec, NaN is considered a numeric type in JavaScript.



11 Amazing New JavaScript Features in ES13

This guide will bring you up to speed with all the latest features added in ECMAScript 13. These powerful new features will modernize your JavaScript with shorter and more expressive code.

11 Amazing New JavaScript Features in ES13

Sign up and receive a free copy immediately.

Leave a Comment

Your email address will not be published. Required fields are marked *