util-ex
Version:
Browser-friendly enhanced util fully compatible with standard node.js
82 lines (78 loc) • 2.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
exports.isEmpty = isEmpty;
var _arguments = _interopRequireDefault(require("./type/arguments.js"));
var _function = _interopRequireDefault(require("./type/function.js"));
var _emptyFunction = _interopRequireDefault(require("./empty-function.js"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
const getOwnPropertyNames = Object.getOwnPropertyNames; // >=ECMAScript5 only
const argsClass = '[object Arguments]';
const arrayClass = '[object Array]';
// const boolClass = '[object Boolean]';
// const dateClass = '[object Date]';
// const errorClass = '[object Error]';
const funcClass = '[object Function]';
// const numberClass = '[object Number]';
const objectClass = '[object Object]';
// const regexpClass = '[object RegExp]';
const stringClass = '[object String]';
const support = {};
(function () {
const Ctor = function () {
this.x = 1;
};
// const object = {
// '0': 1,
// 'length': 1
// };
const props = [];
Ctor.prototype = {
'valueOf': 1,
'y': 1
};
for (const key in new Ctor()) {
props.push(key);
}
// for (let key in arguments) {}
/**
* Detect if an `arguments` object's [[Class]] is resolvable (all but Firefox < 4, IE < 9).
*
* @memberOf _.support
* @type boolean
*/
support.argsClass = toString.call(arguments) === argsClass;
})(1);
/**
* Checks if a given value is empty.
*
* @param {*} value - The value to check.
* @returns {boolean} - Returns `true` if the value is empty, else `false`.
*/
function isEmpty(value) {
const result = true;
if (!value) {
return result;
}
const className = toString.call(value);
const length = value.length;
if (className === arrayClass || className === stringClass || (support.argsClass ? className === argsClass : (0, _arguments.default)(value)) || className === objectClass && typeof length === 'number' && (0, _function.default)(value.splice)) {
return !length;
}
if (className === funcClass) {
return (0, _emptyFunction.default)(value);
}
if (getOwnPropertyNames(value).length > 0) {
return false;
}
/*
for (var key in value) {
if (hasOwnProperty.call(value, key)) return false;
}
*/
return result;
}
;
var _default = exports.default = isEmpty;