Underscore: _.isEmpty在数字上的行为

创建于 2012-01-13  ·  13评论  ·  资料来源: jashkenas/underscore

var cow = {a: 1, b: {}, c: []};
_.isEmpty(cow); // returns false

对于包含数字作为唯一“非空”值的对象,isEmpty可以正常工作

_.isEmpty(cow.a); // returns true

但是,a:1的单个k,v被认为是空的。

我确实阅读了这些问题,并指出最初_.isEmpty并非用于字符串,因此这可能是预期的。 如果不打算这样做,那么我有一个分支可以提出请求。

question

最有用的评论

嗯,是。 我很高兴你问:-)

他们以这种方式我已经看到大多数人使用_.isEmpty来检查是否已将值(任何值)分配给特定变量。 因此,我已经看到许多开发人员遇到了问题。

甚至官方文档也声明“如果对象不包含任何值,则返回true”-一个数字应视为值。

如果我在进行此更改时有某种更大的含义(我只是看不到),那么我的第二个建议是请更新文档以明确声明不应将其用于数字:-)

所有13条评论

我遇到的用例正在做这样的事情

_.each(cow, function(v, k) {
  if (_.isEmpty(v)) {
    // do something with k because of v being empty
  }
});

所以cow.a会被视为cow.b和cow.c。 我可以对此进行编码,但是认为如果我不必这样做(并且如果它不会破坏下划线的精神或视野),它将变得更加整洁

是的,仅为数组对象定义_.isEmpty 。 您不应该在字符串或数字上使用它。

那么,我们必须在数字上使用哪些替代方法?

@jashkenas@michaelficarra_.isEmpty不调用_.isNumber任何特殊原因? (使用_.isArray_.isString方式相同)

有什么理由吗?

嗯,是。 我很高兴你问:-)

他们以这种方式我已经看到大多数人使用_.isEmpty来检查是否已将值(任何值)分配给特定变量。 因此,我已经看到许多开发人员遇到了问题。

甚至官方文档也声明“如果对象不包含任何值,则返回true”-一个数字应视为值。

如果我在进行此更改时有某种更大的含义(我只是看不到),那么我的第二个建议是请更新文档以明确声明不应将其用于数字:-)

为什么您要传递数字到isEmpty ,而不是仅仅检查数字是否为空?

甚至官方文档也声明“如果对象不包含任何值,则返回true”

非常正确。 在JavaScript中,数字(非常可悲)不是对象。

我认为可以通过_.isEmpty doc调整来解决此问题。 开发人员正在寻找的是_.exists

_.isEmpty(a)的意思是“ a是一个空对象吗?”,这有点像语句: if obj == {}在值而不是引用上起作用。 因此,像数字这样的值将返回false,因此将返回null和undefined。

_.isEmpty的示例实现可能是:

_.isEmpty = function(a) {
  return _.isEqual(a, {}) || _.isEqual(a, []) || _.isEqual(a, '');
}

@jashkenas这可能是因为在其他一些语言中,“空”确定变量是否为空:) http://www.php.net/manual/zh/function.empty.php

+1 @josser-主要是因为我有PHP背景:-p
但是我认为仅在文档中对其进行说明就足够了。 我认真地看到人们隔两周就会遇到这种情况。

我今天碰到了这个..我在_.omit上使用它

_.omit(someObject, _.isEmpty);
此页面是否有帮助?
0 / 5 - 0 等级

相关问题

chikamichi picture chikamichi  ·  8评论

markvr picture markvr  ·  3评论

Francefire picture Francefire  ·  5评论

marcalj picture marcalj  ·  5评论

umarfarooq125 picture umarfarooq125  ·  8评论