Type
getType
Returns the native type of a value.
Returns lowercased constructor name of value, "undefined" or "null" if value is undefined or null.
const getType = v => v === undefined ? 'undefined' : v === null ? 'null' : v.constructor.name.toLowerCase();
getType(new Set([1, 2, 3])); // 'set'
is
Checks if the provided value is of the specified type.
Ensure the value is not undefined or null using Array.prototype.includes(), and compare the constructor property on the value with type to check if the provided value is of the specified type.
const is = (type, val) => ![, null].includes(val) && val.constructor === type;
is(Array, [1]); // true is(ArrayBuffer, new ArrayBuffer()); // true is(Map, new Map()); // true is(RegExp, /./g); // true is(Set, new Set()); // true is(WeakMap, new WeakMap()); // true is(WeakSet, new WeakSet()); // true is(String, ''); // true is(String, new String('')); // true is(Number, 1); // true is(Number, new Number(1)); // true is(Boolean, true); // true is(Boolean, new Boolean(true)); // true
isArrayLike
Checks if the provided argument is array-like (i.e. is iterable).
Check if the provided argument is not null and that its Symbol.iterator property is a function.
const isArrayLike = obj => obj != null && typeof obj[Symbol.iterator] === 'function';
isArrayLike(document.querySelectorAll('.className')); // true isArrayLike('abc'); // true isArrayLike(null); // false
isBoolean
Checks if the given argument is a native boolean element.
Use typeof to check if a value is classified as a boolean primitive.
const isBoolean = val => typeof val === 'boolean';
isBoolean(null); // false isBoolean(false); // true
isEmpty
Returns true if the a value is an empty object, collection, has no enumerable properties or is any type that is not considered a collection.
Check if the provided value is null or if its length is equal to 0.
const isEmpty = val => val == null || !(Object.keys(val) || val).length;
isEmpty([]); // true isEmpty({}); // true isEmpty(''); // true isEmpty([1, 2]); // false isEmpty({ a: 1, b: 2 }); // false isEmpty('text'); // false isEmpty(123); // true - type is not considered a collection isEmpty(true); // true - type is not considered a collection
isFunction
Checks if the given argument is a function.
Use typeof to check if a value is classified as a function primitive.
const isFunction = val => typeof val === 'function';
isFunction('x'); // false isFunction(x => x); // true
isNil
Returns true if the specified value is null or undefined, false otherwise.
Use the strict equality operator to check if the value and of val are equal to null or undefined.
const isNil = val => val === undefined || val === null;
isNil(null); // true isNil(undefined); // true
isNull
Returns true if the specified value is null, false otherwise.
Use the strict equality operator to check if the value and of val are equal to null.
const isNull = val => val === null;
isNull(null); // true
isNumber
Checks if the given argument is a number.
Use typeof to check if a value is classified as a number primitive. To safeguard against NaN, check if val === val (as NaN has a typeof equal to number and is the only value not equal to itself).
const isNumber = val => typeof val === 'number' && val === val;
isNumber(1); // true isNumber('1'); // false isNumber(NaN); // false
isObject
Returns a boolean determining if the passed value is an object or not.
Uses the Object constructor to create an object wrapper for the given value. If the value is null or undefined, create and return an empty object. Οtherwise, return an object of a type that corresponds to the given value.
const isObject = obj => obj === Object(obj);
isObject([1, 2, 3, 4]); // true isObject([]); // true isObject(['Hello!']); // true isObject({ a: 1 }); // true isObject({}); // true isObject(true); // false
Recommended Resource - JavaScript: From Fundamentals to Functional JS
Learn higher-order functions, closures, scope, master key functional methods like map, reduce and filter and promises and ES6+ asynchronous JavaScript.
isObjectLike
Checks if a value is object-like.
Check if the provided value is not null and its typeof is equal to 'object'.
const isObjectLike = val => val !== null && typeof val === 'object';
isObjectLike({}); // true isObjectLike([1, 2, 3]); // true isObjectLike(x => x); // false isObjectLike(null); // false
isPlainObject
Checks if the provided value is an object created by the Object constructor.
Check if the provided value is truthy, use typeof to check if it is an object and Object.constructor to make sure the constructor is equal to Object.
const isPlainObject = val => !!val && typeof val === 'object' && val.constructor === Object;
isPlainObject({ a: 1 }); // true isPlainObject(new Map()); // false
isPrimitive
Returns a boolean determining if the passed value is primitive or not.
Create an object from val and compare it with val to determine if the passed value is primitive (i.e. not equal to the created object).
const isPrimitive = val => Object(val) !== val;
isPrimitive(null); // true isPrimitive(50); // true isPrimitive('Hello!'); // true isPrimitive(false); // true isPrimitive(Symbol()); // true isPrimitive([]); // false
isPromiseLike
Returns true if an object looks like a Promise, false otherwise.
Check if the object is not null, its typeof matches either object or function and if it has a .then property, which is also a function.
const isPromiseLike = obj => obj !== null && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';
isPromiseLike({ then: function() { return ''; } }); // true isPromiseLike(null); // false isPromiseLike({}); // false
isString
Checks if the given argument is a string. Only works for string primitives.
Use typeof to check if a value is classified as a string primitive.
const isString = val => typeof val === 'string';
isString('10'); // true
isSymbol
Checks if the given argument is a symbol.
Use typeof to check if a value is classified as a symbol primitive.
const isSymbol = val => typeof val === 'symbol';
isSymbol(Symbol('x')); // true
isUndefined
Returns true if the specified value is undefined, false otherwise.
Use the strict equality operator to check if the value and of val are equal to undefined.
const isUndefined = val => val === undefined;
isUndefined(undefined); // true
isValidJSON
Checks if the provided string is a valid JSON.
Use JSON.parse() and a try... catch block to check if the provided string is a valid JSON.
const isValidJSON = str => { try { JSON.parse(str); return true; } catch (e) { return false; } };
isValidJSON('{"name":"Adam","age":20}'); // true isValidJSON('{"name":"Adam",age:"20"}'); // false isValidJSON(null); // true
