type.js

/** @module Type */

/**
 * 返回val的类型。
 * @function getType
 * @param {*} val - 需要检查的值。
 * @return {string}
 * @example
 * U.getType(new Set([1, 2]))
 * // => 'set'
 */
export const getType = val => (
  isUndefined(val)  ? 'undefined' : isNull(val) ? 'null' : val.constructor.name.toLowerCase()
)

/**
 * 检查value是否为number类型。使用typeof来检查,返回布尔值。
 * @function isNumber
 * @param {*} value - 需要检查的值。
 * @return {boolean}
 * @example
 * U.isNumber(3)
 * // => true
 *
 * U.isNumber(Number.MIN_VALUE)
 * // => true
 *
 * U.isNumber(Infinity)
 * // => true
 *
 * U.isNumber('3')
 * // => false 
 */
export const isNumber = value => typeof value === 'number'

/**
 * 检查值是否为字符串。使用typeof来检查,返回布尔值。
 * @function isString
 * @param {*} value - 需要检查的值。
 * @return {boolean}
 * @example
 * U.isString(3)
 * // => false
 *
 * U.isString('3')
 * // => true
 */
export const isString = value => typeof value === 'string'

/**
 * 检查值是否为null对象。使用typeof来检查,返回布尔值。
 * @function isNull
 * @param {*} value - 需要检查的值。
 * @return {boolean}
 * @example
 * U.isNull(3)
 * // => false
 *
 * U.isNull(null)
 * // => true
 */
export const isNull = value => value === null

/**
 * 检查值是否为undefined对象。使用typeof来检查,返回布尔值。
 * @function isUndefined
 * @param {*} value - 需要检查的值。
 * @return {boolean}
 * @example
 * U.isUndefined(undefined)
 * // => true
 *
 * U.isUndefined(null)
 * // => false
 */
export const isUndefined = value => value === undefined

/**
 * 检查值是否为布尔值。使用typeof来检查,返回布尔值。
 * @function isBoolean
 * @param {*} value - 需要检查的值。
 * @return {boolean}
 * @example
 * U.isBoolean(false)
 * // => true
 *
 * U.isBoolean(null)
 * // => false
 */
export const isBoolean = value => typeof value === 'boolean'

/**
 * 检查值是否为symbol类型。使用typeof来检查,返回布尔值。
 * @function isSymbol
 * @param {*} value - 需要检查的值。
 * @return {boolean}
 * @example
 * U.isSymbol(Symbol('x'))
 * // => true
 */
export const isSymbol = value => typeof value === 'symbol'

/**
 * 检查值是否为function类型。使用typeof来检查,返回布尔值。
 * @function isFunction
 * @param {*} value - 需要检查的值。
 * @return {boolean}
 * @example
 * U.isFunction(3)
 * // => false
 *
 * U.isFunction(function () {})
 * // => true
 */
export const isFunction = value => typeof value === 'function'

/**
 * 使用Array.isArray方法检查arr是否为数组类型,返回布尔值。
 * @function isArray
 * @param {*} arr - 需要检查的值。
 * @return {boolean}
 * @example
 * U.isArray([])
 * // => true
 *
 * U.isArray(null)
 * // => false
 */
export const isArray = arr => Array.isArray(arr)

/**
 * 检查alue是否为对象类型,返回布尔值。
 * @function isObject
 * @param {*} value - 需要检查的值。
 * @return {boolean}
 * @example
 * U.isObject(null)
 * // => false
 *
 * U.isObject([1, 2])
 * // => false
 *
 * U.isObject({})
 * // => true
 */
export const isObject = value => value instanceof Object && !isArray(value)