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を返します」と記載されており、数値は値として適格である必要があります。

この変更を行う際に、私には見えないような大きな影響がある場合、2番目に良い提案は、ドキュメントを更新して、数字には使用しないことを明確に示すことです:-)

全てのコメント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:なぜ、特定の理由で_.isNumber中で呼び出されていない_.isEmpty ? (同じ方法で_.isArray_.isStringが使用されています)

それが必要な理由は何ですか?

はい、そうです。 あなたが尋ねてくれてうれしいです:-)

ほとんどの人が_.isEmpty使用しているのを見たように、特定の変数に値(任意の値)が割り当てられているかどうかを確認するのはほぼ間違いありません。 このため、多くの開発者が問題にぶつかるのを見てきました。

公式ドキュメントでさえ、「オブジェクトに値が含まれていない場合はtrueを返します」と記載されており、数値は値として適格である必要があります。

この変更を行う際に、私には見えないような大きな影響がある場合、2番目に良い提案は、ドキュメントを更新して、数字には使用しないことを明確に示すことです:-)

数値がnullかどうかを確認するだけでなく、 isEmptyに数値を渡したいのはなぜですか。

公式ドキュメントでさえ、「オブジェクトに値が含まれていない場合はtrueを返します」と記載されています。

まったく正しい。 JavaScriptでは、数値は(非常に悲しいことに)オブジェクトではありません。

これは_.isEmptyドキュメントの調整で解決できると思います。 開発者が探しているのは

_.isEmpty(a)が「 aは空のオブジェクトですか?」を意味するのは理にかなっています。たとえば、 if obj == {}は、参照ではなく値に対して機能します。 したがって、数値などの値はfalseを返すため、nullおよび未定義になります。

_.isEmpty実装例は次のとおりです。

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

@jashkenasこれはおそらく、他のいくつかの言語では「空」が変数が空かどうかを決定するためです:) http://www.php.net/manual/en/function.empty.php

@josserへの+
しかし、ドキュメントでそれを明確にするだけでも十分だと思います。 私は人々が隔週でこれに遭遇するのを真剣に見ています。

私は今日これに遭遇しました..私は_.omitでそれを使用していました

_.omit(someObject, _.isEmpty);
このページは役に立ちましたか?
0 / 5 - 0 評価