web-dev-qa-db-ja.com

(null == false)と(null == true)の両方がfalseを返すのはなぜですか?

nullは属性や関数を持たないオブジェクトであることを知っています。

しかし、なぜconsole.log(null == false);console.log(null == true);の両方がfalseを返すのか混乱しています。

nullbooleanの間の変換規則は何ですか?

38
iatboy

これは、 Abstract Equality Comparison Algorithm では、 Type(x) または Type(y) がブール値の場合式x == yの場合、ブール値は ToNumber で強制的に数値に変換する必要があります。これにより、trueが1に、false+0

つまり、true == somethingまたはsomething == trueを比較すると、1 == somethingまたはsomething == 1になります(trueおよび1falseに置き換え、 +0 for false)。

Nullタイプ は、1または+0に等しいと比較されません(実際、ヌルはAECAのundefinedにのみ匹敵します)。

[〜#〜] mdn [〜#〜] には、JavaScriptのさまざまな種類の平等に関する詳細な説明があります。詳しく知りたい場合は、検討する価値があります。

ただし、nullを数値に強制すると、 +0に強制 になるため、+null == falseは実際にtrueを返します。

48
Sean Vieira

回答: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

Javascirpt | MDN

2

nullは、「空の」値または「未定義」を表すJavaScriptリテラルです。 nullはJavaScriptのプリミティブ値の1つです。値が未定義であるため、ブール値trueにもブール値falseにも等しくありません。 nullでなくても、falseの値はfalseに傾いています。そのため、「偽」演算子と呼ばれ、varnullの場合、if (var) { }ブロックは実行されません。

1
Diptendu

現在の議論に追加します。 null> = falseはtrueを返します。

これは!(null <false)と解釈されるためだと思います