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:
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'.
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:
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':
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'.
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'
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
0.nullwas represented as the NULL pointer (0x00in most platforms). Consequently,nullhad0as type tag, hence thetypeofreturn 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':
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.
