utils/type_utils.js

/**
 * This module contains functions used to check variable type.
 * @module typeUtils
 * @memberof mentality
 */

module.exports = {
  /**
   * Check if a value is a string.
   * @param  {Any}      value Value to be checked.
   * @return {Boolean}        Returns true if a value is a string, false otherwise.
   */
  isString(value) {
    return typeof value === 'string' || value instanceof String;
  },

  /**
   * Check if a value is a number.
   * @param  {Any}      value Value to be checked.
   * @return {Boolean}        Returns true if a value is a number, false otherwise.
   */
  isNumber(value) {
    return typeof value === 'number';
  },

  /**
   * Check if a value is a float.
   * @param  {Any}      value Value to be checked.
   * @return {Boolean}        Returns true if a value is a float, false otherwise.
   */
  isFloat(value) {
    return this.isNumber(value) && isFinite(value);
  },

  /**
   * Check if a value is an integer.
   * @param  {Any}      value Value to be checked.
   * @return {Boolean}        Returns true if a value is an integer, false otherwise.
   */
  isInteger(value) {
    return this.isFloat(value) && Math.floor(value) === value;
  },

  /**
   * Check if a value is a digit.
   * @param  {Any}      value Value to be checked.
   * @return {Boolean}        Returns true if a value is a digit, false otherwise.
   */
  isDigit(value) {
    return !isNaN(parseFloat(value)) &&
            this.isFinite(value) &&
            value.length === 1;
  },

  /**
   * Check if a value is a letter.
   * @param  {Any}      value Value to be checked.
   * @return {Boolean}        Returns true if a value is a letter, false otherwise.
   */
  isLetter(value) {
    return this.isString(value) &&
           /^[a-zA-Z]/.test(value) &&
           value.length === 1;
  },

  /**
   * Check if a value is a letter or a digit.
   * @param  {Any}      value Value to be checked.
   * @return {Boolean}        Returns true if a value is a letter or a digit, false otherwise.
   */
  isLetterOrDigit(value) {
    return this.isDigit(value) || this.isLetter(value);
  },

  /**
   * Check if a value is an array.
   * @param  {Any}      value Value to be checked.
   * @return {Boolean}        Returns true if a value is an array, false otherwise.
   */
  isArray(value) {
    return Array.isArray(value);
  },

  /**
   * Check if a value is an object.
   * @param  {Any}      value Value to be checked.
   * @return {Boolean}        Returns true if a value is an object, false otherwise.
   */
  isObject(value) {
    return value && value instanceof Object;
  },
};