在Lo-Dash中验证非空字符串

sne*_*tje 6 lodash

[用例:可移植的Lo-Dash代码]我一直在我们的nodeJS项目中寻找一种优雅的Lo-Dash空字符串验证器,因为_.isEmpty()仅处理数组和对象。因此,我总是以丑陋的老式方式来完成此操作:

if (typeof(myString) !== "undefined" && myString.trim() !== "") {
  // handle the string
}
Run Code Online (Sandbox Code Playgroud)

......直到我偶然发现_.toString() ,其回报''nullundefined。因此,我在ExtendedLodash.js帮助器中创建了一个仅使用Lo-Dash方法的mixin。但是我不确定有什么警告。欢迎对我可能要监督的内容发表任何评论

'use strict';

const _ = require('lodash');

/**
 * Extension of _.isEmpty(), which will return `true` for 
 *   "", 0, [], {}, false, undefined and null
 * @param stringOrObjectOrNull
 * @returns {boolean}
 */
function empty(stringOrObjectOrNull) {
  return _(stringOrObjectOrNull).toString().trim() === ""
      || _.isEmpty(stringOrObjectOrNull);
}

_.mixin({
  empty
});

module.exports = _;
Run Code Online (Sandbox Code Playgroud)

现在我们可以使用:

const _ = require('../lib/helpers/extendedLodash'); 
if (!_.empty(myStringOrObject)) {
  // handle the string ( ...or object ;-| )
}
Run Code Online (Sandbox Code Playgroud)

并测试:

  console.log('is empty `[]`: ' + _.empty([]) + " -> " + "`" + _.toString([]) + "`");
  console.log('is empty `{}`: ' + _.empty({}) + " -> " + "`" + _.toString({}) + "`");
  console.log('is empty `""`: ' + _.empty("") + " -> " + "`" + _.toString("") + "`");
  console.log('is empty `"    "`: ' + _.empty("    ") + " -> " + "`" + _.toString("    ") + "`");
  console.log('is empty `0`: ' + _.empty(0) + " -> " + "`" + _.toString(0) + "`");
  console.log('is empty `false`: ' + _.empty(false) + " -> " + "`" + _.toString(false) + "`");
  console.log('is empty `null`: ' + _.empty(null) + " -> " + "`" + _.toString(null) + "`");
  console.log('is empty `undefined`: ' + _.empty(undefined) + " -> " + "`" + _.toString(undefined) + "`");
Run Code Online (Sandbox Code Playgroud)

注意:再次检查这段代码,我意识到它的行为就像PHP的empty()方法一样模糊。我只是想避免不必要捕获undefined可能未声明变量的地方(...)