UNPKG

@gvray/eskit

Version:

A rich and colorful toolkit about typescript and javascript.

76 lines 2.16 kB
import isNil from './isNil'; import isArrayLike from './isArrayLike'; import getType from './getType'; import isPrototype from './isPrototype'; import hasOwnProperty from './hasOwnProperty'; /** * Checks if a value is empty according to JavaScript's notion of emptiness. * 根据JavaScript的空值概念检查值是否为空。 * * A value is considered empty if it is: * - `undefined` or `null` * - An empty string, array, or array-like object * - An empty Map or Set object * - An object with no own enumerable properties * * 以下情况被认为是空值: * - `undefined` 或 `null` * - 空字符串、数组或类数组对象 * - 空的Map或Set对象 * - 没有自有可枚举属性的对象 * * @param value - The value to check / 要检查的值 * @returns True if the value is empty / 如果值为空则返回true * * @example * ```typescript * // Primitive empty values / 原始空值 * isEmpty(undefined) // true * isEmpty(null) // true * isEmpty('') // true * isEmpty(0) // false (zero is not empty) * isEmpty(false) // false (false is not empty) * * // Collections / 集合 * isEmpty([]) // true * isEmpty([1, 2, 3]) // false * isEmpty({}) // true * isEmpty({ key: 'value' }) // false * * // Built-in objects / 内置对象 * isEmpty(new Map()) // true * isEmpty(new Map([['key', 'value']])) // false * isEmpty(new Set()) // true * isEmpty(new Set([1, 2, 3])) // false * * // Array-like objects / 类数组对象 * isEmpty(arguments) // true (if arguments is empty) * isEmpty({ length: 0 }) // true * isEmpty({ length: 1, 0: 'item' }) // false * ``` * * @since 1.0.0 */ var isEmpty = function (value) { if (isNil(value)) { return true; } if (isArrayLike(value)) { return !value.length; } var type = getType(value); if (type === 'Map' || type === 'Set') { return !value.size; } if (isPrototype(value)) { return !Object.keys(value).length; } for (var key in value) { if (hasOwnProperty(value, key)) { return false; } } return true; }; export default isEmpty; //# sourceMappingURL=isEmpty.js.map