underscore的_.isEmpty()遇到的坑
发布于 7 年前 作者 Jane-Mardan 5040 次浏览 来自 问答

.isEmpty(11)当对象为数字是返回为true let _ = require(‘underscore’); console.log(.isEmpty(11)); /usr/local/bin/node test2.js true 看了源代码

// Is a given array, string, or object empty? // An “empty” object has no enumerable own-properties. .isEmpty = function(obj) { if (obj == null) return true; if (.isArray(obj) || _.isString(obj) || .isArguments(obj)) return obj.length === 0; for (var key in obj) if (.has(obj, key)) return false; return true; };还是不太懂,希望给个建议

最后写个对promise使用的感想 全部操作放进promise用reject返回err,集中处理err,promise的好处

9 回复

我只用他检查没有key的对象。 数组用_.size=0 字符串或数字 取非

来自酷炫的 CNodeMD

@dbit-xia 其实这样也挺好的 但我感觉用underscore方便一些而且功能很多轻量级插件 所以一直在用 今天用它进行检查number类型数据发现不能判断,看代码也看不懂毕竟新手 谢谢你的回复

源码:

_.isEmpty = function(obj) {
  if (obj == null) return true;
  if (isArrayLike(obj) && (_.isArray(obj) || _.isString(obj) || _.isArguments(obj))) return obj.length === 0;
  return _.keys(obj).length === 0;
};

_.keys 源码:

  _.keys = function(obj) {
    if (!_.isObject(obj)) return [];
    if (nativeKeys) return nativeKeys(obj);
    var keys = [];
    for (var key in obj) if (_.has(obj, key)) keys.push(key);
    // Ahem, IE < 9.
    if (hasEnumBug) collectNonEnumProps(obj, keys);
    return keys;
  };

如果传入数字,最后会返回 [].length === 0。数字被当成了 object object 来判断。 文档里说了传入的是可枚举的对象。lz 可能对这个 API 理解有误。

这个源码不懂,说明基础不是很扎实… 这里面代码几乎没有深奥的逻辑~ 没有打击楼主的意思。一遍可能有些不明白的地方,查查资料,三遍过后还不懂,我负责~

@DevinXian 嗯嗯 确实基础不行 自豪地采用 CNodeJS ionic

@ianchn 谢谢 自豪地采用 CNodeJS ionic

看源码前,先看文档啊,文档里说明了,这个方法用于检查 “可枚举对象”,可枚举对象。。。

@coolcao (>﹏<)好 自豪地采用 CNodeJS ionic

回到顶部