23

alert(null==undefined)に出力する場合true

これの論理的な理由は何ですか。

これは JavaScript でハードコードされているものですか、それとも説明がありますか。

4

5 に答える 5

35

言語仕様は明示的に言っています

x が null で y が定義されていない場合は、true を返します

その決定の理由を説明する言語設計プロセスの記録は知りませんが、==さまざまな型を処理するためのルールがあり、「null」と「未定義」はどちらも「何もない」ことを意味するため、それらをequal は直感的に理解できます。

(型をいじりたくない場合は、===代わりに使用してください)。

于 2013-05-17T11:27:17.440 に答える
6

同じ理由で0 == "0"- javascript は型付けが緩い - 何かを別のものに変換できる場合は、=== を使用しない限り変換されます。

alert(null===undefined);

false を返します。

これらの特定の変換が発生する理由については、答えは非常に単純です。プログラミング言語が特定の方法で動作する理由には、「そう言うから」以外の理由は必要ありません。

編集:少し良い答え - Javascriptでは、ブール値に変換すると、特定のオブジェクト/値が「真実」または「偽」になります。0 (整数ゼロ)、"0" (文字列内の文字ゼロ)、"" (空の文字列) はすべて false です。使用するより良い比較がない場合は、ブール演算が適用されます。

これが、"0" が空の文字列と等しくなく、"0" と "" の両方が false に等しい理由です。

于 2013-05-17T11:26:02.680 に答える
-2

比較演算子は==型をチェックしません。null両方とundefinedも戻りfalseます。falseそのため、コードはが と等しいかどうかを実際にチェックしていfalseます。

> null == undefined;
< true
> false == false
< true

ただし、それらのタイプは等しくありません。

> typeof undefined;
< "undefined"
> typeof null;
< "object"

===そのため、比較演算子が型とその値の両方をチェックするため、次のステートメントは false を返します。

> undefined === null;
< false
于 2013-05-17T11:33:15.323 に答える