web-dev-qa-db-ja.com

JavaScript:空の配列、[]は条件構造でtrueと評価されます。どうしてこれなの?

この式を期待していたため、コードに多くのバグが発生していました。

Boolean([]);はfalseと評価されます。

しかし、これはtrueと評価されたため、そうではありませんでした。

したがって、[]を返す可能性のある関数は次のようになります。

// Where myCollection possibly returned [ obj1, obj2, obj3] or []
if(myCollection)
{
  // ...

}else
{
  // ...
}

期待したことをしませんでした。

[]を空の配列と仮定するのは間違っていますか?

また、この動作はすべてのブラウザーで一貫していますか?または、そこにも落とし穴がありますか? Goolgle Chromeところでこの動作を観察しました。

67
racl101

から http://www.sitepoint.com/javascript-truthy-falsy/

次の値は常に偽物です。

  • false
  • 0 (zero)
  • ""(空の文字列)
  • null
  • undefined
  • NaN(非数値を意味する特別な数値!)

「0」(引用符でゼロ)、「false」(引用符でfalse)、空の関数、空の配列、空のオブジェクトなど、他のすべての値は真実です。

77
Barmar

その配列の.lengthをチェックして、要素が含まれているかどうかを確認する必要があります。

if (myCollection) // always true
if (myCollection.length) // always true when array has elements
if (myCollection.length === 0) // same as is_empty(myCollection)
13
DevlshOne