Sun*_*nar 6 javascript refactoring node.js ecmascript-6 sonarqube
如何实现这一目标
var has = Object.prototype.hasOwnProperty
var toString = Object.prototype.toString
function isEmpty(val) {
if (val == null) return true
if ('boolean' == typeof val) return false
if ('number' == typeof val) return val === 0
if ('string' == typeof val) return val.length === 0
if ('function' == typeof val) return val.length === 0
if (Array.isArray(val)) return val.length === 0
if (val instanceof Error) return val.message === ''
if (val.toString == toString) {
switch (val.toString()) {
case '[object File]':
case '[object Map]':
case '[object Set]': {
return val.size === 0
}
case '[object Object]': {
for (var key in val) {
if (has.call(val, key)) return false
}
return true
}
}
}
return false
}
module.exports = isEmpty
Run Code Online (Sandbox Code Playgroud)
如果无法拆分函数或使用 OOP 方法,可以使用函数数组并对其进行迭代:
const has = Object.prototype.hasOwnProperty;
const toString = Object.prototype.toString;
function isEmpty(val) {
let isEmpty = null;
const checkFunctions = [
(val) => 'boolean' === typeof val ? false : null,
(val) => 'number' === typeof val ? val === 0 : null,
(val) => ['string', 'function'].includes(typeof val) ? val.length === 0 : null,
(val) => Array.isArray(val) ? val.length === 0 : null,
(val) => val instanceof Error ? val.message === '' : null,
(val) => val.toString == toString && ['[object File]', '[object Map]', '[object Set]'].includes(val.toString()) ? val.size === 0 : null,
(val) => {
if (val.toString == toString && val.toString() === '[object Object]') {
for (var key in val) {
if (has.call(val, key)) return false
}
return true;
}
}
];
for (let i = 0; i < checkFunctions.length; i++) {
isEmpty = checkFunctions[i](val);
if (isEmpty !== null) {
return isEmpty;
};
}
}
console.log(isEmpty(''), true);
console.log(isEmpty('Hallo'), false);
console.log(isEmpty(0), true);
console.log(isEmpty(1), false);
console.log(isEmpty({}), true);
console.log(isEmpty({a: 1}), false);Run Code Online (Sandbox Code Playgroud)
您还可以扩展 JS 的核心类型,然后编写 val.isEmpty() 来代替 isEmpty(val)。例如:
String.prototype.isEmpty = function() {return this.length === 0}
Array.prototype.isEmpty = function() {return this.length === 0}
console.log("".isEmpty(), true);
console.log("foo".isEmpty(), false);
console.log([].isEmpty(), true);
console.log([1,2,3].isEmpty(), false);Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21950 次 |
| 最近记录: |