var cow = {a: 1, b: {}, c: []};
_.isEmpty(cow); // returns false
对于包含数字作为唯一“非空”值的对象,isEmpty可以正常工作
_.isEmpty(cow.a); // returns true
但是,a:1的单个k,v被认为是空的。
我确实阅读了这些问题,并指出最初_.isEmpty并非用于字符串,因此这可能是预期的。 如果不打算这样做,那么我有一个分支可以提出请求。
我遇到的用例正在做这样的事情
_.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);
最有用的评论
嗯,是。 我很高兴你问:-)
他们以这种方式我已经看到大多数人使用
_.isEmpty
来检查是否已将值(任何值)分配给特定变量。 因此,我已经看到许多开发人员遇到了问题。甚至官方文档也声明“如果对象不包含任何值,则返回true”-一个数字应视为值。
如果我在进行此更改时有某种更大的含义(我只是看不到),那么我的第二个建议是请更新文档以明确声明不应将其用于数字:-)