1. ホーム
  2. ジャバスクリプト

[解決済み】JavaScriptのすべてのfalsey値

2022-04-02 02:36:20

質問

JavaScriptで「falsey」な値とは? のような式で偽と評価されることを意味します。 if(value) , value ?!value ?


があります。 Stack Overflowでは、すでにfalsey値の目的についていくつかの議論がなされています。 しかし、すべてのfalsey値が何であるかを列挙した包括的な完全回答はありません。

MDN JavaScript Referenceで完全なリストを見つけることができませんでした。 そして、JavaScriptにおけるfalsey値の完全で権威あるリストを探したときに、トップ結果がブログ記事であったことに驚きました。 NaN また、Stack Overflowのように、コメントや別の答えを追加して、癖や驚き、抜け、間違い、注意点などを指摘できるような形式をとっているものはありませんでした。だから、作ることに意味があるように思えたのです。

解決方法は?

JavaScriptにおける偽の値

Falsey"は、単に、JavaScriptの内部で ToBoolean 関数が返す false . ToBoolean 下敷き !value , value ? ... : ...;if (value) . 以下はその 公式仕様書(2020年作業草案) (からの変更点のみ)。 1997年の最初のECMAscript仕様 が追加されたことです。 ES6のシンボル は常に真理であり BigInt である。

<ブロッククオート
<テーブル 引数の種類 結果 未定義 戻る false . Null 戻る false . ブーリアン 戻る 引数 . 番号 引数が +0 , -0 または NaN を返します。 false それ以外の場合は true . 文字列 引数が空の場合 String (長さが0)の場合は false を返し、それ以外の場合は true . BigInt 引数が 0n を返します。 false それ以外の場合は true . 記号 戻る true . 対象物 戻る true .

との比較 == (緩やかな等式)

ファルシーバリューの話をするのは価値がある との緩やかな比較 == を使用しています。 ToNumber() というように、根本的な違いがあるため、混乱を招くことがあります。事実上、3つのグループを形成しています。

  • false, 0, -0, "", '' はすべて ==
    • false == "" , '' == 0 したがって 4/2 - 2 == 'some string'.slice(11);
  • null, undefined と一致します。 ==
    • null == undefined しかし undefined != false
    • また typeof null リターン 'object' , null これは長年のバグ/不具合です。 互換性を維持するために修正されなかったものです。それは真のオブジェクトではなく、オブジェクトは真理である(その"故意の違反"を除いては。 document.all JavascriptがHTMLに実装されている場合)
  • NaN は何もマッチしません。 == または === それ自身でもない
    • NaN != NaN , NaN !== NaN , NaN != false , NaN != null

厳密な等式(quot;strict equality")で( === ) の場合、そのようなグループ分けはありません。ただ false === false .

これが、多くの開発者や多くのスタイルガイド(例. スタンダードジーズ を好む。 === を使用することはほとんどありません。 == .


実際にある真実の価値 == false

Truthy"は、単にJavaScriptの内部で ToBoolean 関数が返す true . 注意すべきJavascriptの癖 (を好むもう一つの理由です。 === オーバー == ): 値が真実であることは可能である ( ToBoolean が返ってくる true ) だけでなく == false .

と思うかもしれません。 if (value && value == false) alert('Huh?') は論理的に不可能なことで、起こるはずがないのですが、起こるのです、なぜなら。

  • "0"'0' - は空でない文字列であり、真理であるが、Javascriptの == は数字と同等の文字列(例えば 42 == "42" ). このため 0 == false もし "0" == 0 , "0" == false .
  • new Number(0) そして new Boolean(false) - はオブジェクトであり、それは真理である、しかし == は、その値を見ています。 == false .
  • 0 .toExponential(); - と同等の数値を持つオブジェクト。 0
  • 偽と等しい値を真である型に包んで与える類似の構文すべて
  • [] , [[]][0] (ありがとうございます クラウドフィート には JavaScript均等表リンク )

より真実味のある価値観

これらは、ある人が「嘘くさい」と思うような、実は真実味のある値です。

  • -1 およびすべての非ゼロ負数

  • ' ' , " " , "false" , 'null' ... すべて 空白文字だけの文字列を含む、空でない文字列

  • からのもの typeof のように、常に空でない文字列を返します。

  • あらゆるオブジェクト(ただし、故意の違反は除く。 document.all をブラウザで表示します)。以下のことを忘れないでください。 null は実際にはオブジェクトではありません。 typeof はそうでないことを示唆しています。例

    • {}
    • []
    • function(){} または () => {} (任意の関数、空関数を含む)
    • Error のインスタンスと Error
    • 任意の正規表現
    • で作成されたもの new (を含む)。 new Number(0)new Boolean(false) )
  • 任意の 記号

true , 1 , "1"[1] 戻る true で比較した場合 == .