141

次の式を期待していたため、コードで多くのバグに遭遇していました。

Boolean([]);false に評価します。

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

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

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

}else
{
  // ...
}

期待されたことをしなかった。

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

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

4

6 に答える 6

161

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

次の値は常に偽です。

  • 間違い
  • 0 (ゼロ)
  • "" (空文字列)
  • ヌル
  • 未定義
  • NaN (非数を意味する特別な Number 値!)

"0"(引用符で囲まれたゼロ)、"false"(引用符で囲まれた false)、空の関数、空の配列 ( [])、および空のオブジェクト ( )を含む、他のすべての値は true{}です。

この理由については、JavaScript 配列が特定のタイプのオブジェクトにすぎないためではないかと考えています。配列を特別に扱うと、 test に余分なオーバーヘッドが必要になりますArray.isArray()。また、このコンテキストで真の配列が他の配列のようなオブジェクトと異なる動作をすると混乱する可能性がありますが、すべての配列のようなオブジェクトを同じ動作にするとさらにコストがかかります。

于 2013-10-02T20:27:05.543 に答える
39

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

if (myCollection) // always true
if (myCollection.length) // always true when array has elements
if (myCollection.length === 0) // same as is_empty(myCollection)
于 2013-10-02T20:26:44.000 に答える