JavaScriptの誤った値
false
- ゼロ
Number
:種類0
とも-0
、0.0
と六角フォーム0x0
(感謝のRBT)
BigInt
タイプのゼロ:0n
および-0n
(2020の新機能、ありがとうGetMeARemoteJob)
""
、''
および``
-長さが0の文字列
null
undefined
NaN
document.all
(HTMLブラウザーのみ)
- これは変なものです。
document.all
で、falseyオブジェクトであるtypeof
としてundefined
。これは、IE11の前にIEでのMicrosoft-専有関数であった、とに追加された「JavaScriptの仕様の故意の侵害」としてHTMLの仕様、IEのために書かれたサイトは、例えば、アクセスしようとしてでブレークしませんようにdocument.all.something
。かつてはif (document.all)
、条件付きコメントの前にIEを検出するための一般的な方法であったため、これは誤りです。参照してくださいなぜdocument.allのfalsyのですか?詳細については
「Falsey」は、JavaScriptの内部ToBoolean
関数がを返すことを意味しますfalse
。 ToBoolean
根底にある!value
、value ? ... : ...;
とif (value)
。これが公式仕様(2020ワーキングドラフト)です(1997年の最初のECMAscript仕様以降の唯一の変更は、ES6のシンボルの追加です。これは常に真実でありBigInt
、上記のとおりです)。

==
(ゆるい平等)との比較
根本的な違いにより、を使用して混乱を招く可能性のある、との偽の値の緩やかな比較==
について話すことは価値ToNumber()
があります。彼らは効果的に3つのグループを形成します:
false, 0, -0, "", ''
すべてが互いに一致する ==
- たとえば
false == ""
、'' == 0
したがって4/2 - 2 == 'some string'.slice(11);
null, undefined
との一致 ==
- 例えば
null == undefined
しかし、undefined != false
- また、returnはオブジェクトではありませんが、これは互換性を維持するために修正されなかった長年のバグ/癖であることにも言及する価値があり
typeof null
ます。それは真のオブジェクトではなく、オブジェクトは真実です(JavascriptがHTMLで実装されている場合のその「意図しない違反」を除いて)'object'
null
document.all
NaN
で、何も一致していない==
か、===
いなくても、それ自体、
- 例えば
NaN != NaN
、NaN !== NaN
、NaN != false
、NaN != null
「厳密な平等」(===
)の場合、そのようなグループはありません。のみfalse
===
false
。
これが、多くの開発者や多くのスタイルガイド(たとえば、standardjs)が好ん===
で使用することがほとんどない理由の1つです==
。
実際の真実の価値観 == false
「真実」とは、JavaScriptの内部ToBoolean
関数がを返すことを意味しますtrue
。Javascriptをの癖はを意識するように(と別の良い理由が好む===
以上==
):それは可能である値は(truthyするために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]
(おかげでcloudfeetのためのJavaScript平等表リンク)
さらに真実な値
これらはほんの一部の値であり、一部の人々は誤っていると予想するかもしれませんが、実際には真実です。
true
、1
、"1"
および[1]
リターンtrue
と相互に比較==
。