null
は属性や関数を持たないオブジェクトであることを知っています。
しかし、なぜconsole.log(null == false);
とconsole.log(null == true);
の両方がfalseを返すのか混乱しています。
null
とboolean
の間の変換規則は何ですか?
これは、 Abstract Equality Comparison Algorithm では、 Type(x)
または Type(y)
がブール値の場合式x == y
の場合、ブール値は ToNumber
で強制的に数値に変換する必要があります。これにより、true
が1に、false
が+0
。
つまり、true == something
またはsomething == true
を比較すると、1 == something
またはsomething == 1
になります(true
および1
をfalse
に置き換え、 +0
for false
)。
Nullタイプ は、1または+0に等しいと比較されません(実際、ヌルはAECAのundefined
にのみ匹敵します)。
[〜#〜] mdn [〜#〜] には、JavaScriptのさまざまな種類の平等に関する詳細な説明があります。詳しく知りたい場合は、検討する価値があります。
ただし、null
を数値に強制すると、 +0
に強制 になるため、+null == false
は実際にtrue
を返します。
回答:nullとbooleanの間に相対的な側面はありません。
MDNソース:-
値nullはリテラルです(undefinedのようなグローバルオブジェクトのプロパティではありません)。 APIでは、nullは多くの場合、オブジェクトが予想される場所に取得されますが、関連するオブジェクトはありません。 nullまたは未定義をチェックするときは、等価(==)演算子と同一(===)演算子の違いに注意してください(前者では型変換が実行されます)。
// foo does not exist, it is not defined and has never been initialized: > foo "ReferenceError: foo is not defined" // foo is known to exist now but it has no type or value: > var foo = null; foo "null"
ヌルと未定義の違い
typeof null // object (bug in ECMAScript, should be null) typeof undefined // undefined null === undefined // false null == undefined // true
値null
は、「空の」値または「未定義」を表すJavaScriptリテラルです。 null
はJavaScriptのプリミティブ値の1つです。値が未定義であるため、ブール値true
にもブール値false
にも等しくありません。 null
でなくても、false
の値はfalseに傾いています。そのため、「偽」演算子と呼ばれ、var
がnull
の場合、if (var) { }
ブロックは実行されません。
現在の議論に追加します。 null> = falseはtrueを返します。
これは!(null <false)と解釈されるためだと思います