検索

ホームページ  >  に質問  >  本文

JavaScriptの==の判定について

0 == "" // true

上記のコードは暗黙的な変換によるものなのか、0がfalseで""もfalseなので等しいのですが、 === 記号が使われている このような問題です。

私の質問はこれです、それは

です

0 == 0

###まだ###

false == false

黄舟黄舟2809日前684

全員に返信(6)返信します

  • 黄舟

    黄舟2017-05-19 10:31:55

    はっきり言っておきますが、私ほど暗黙的変換に詳しい人はここにはいません。

    まず、ECMAScript 仕様の == 変換のルールを確認してください。

    左側のtypeof 0は数値型です

    右側のtypeof「」は文字列型です

    対応するルールに従い、下位4つのルールを満たしていれば、今回はx==ToNumber(y)、今回は0==ToNumber("")で比較が行われます

    ToNumber() に対応する ECMAScript のルールを見てみましょう:

    次に、以下をご覧ください:

    最後の ToNumber("") が +0 に変換されるのがわかりましたか

    結局0==+0になったって?暗黙的な変換は最終的に 2 つの数値の比較になることに注意してください。

    対応する具体的なルールは、次の図で説明できます:

    もちろん、これらが最も簡単です:

    リーリー

    上記のことが理解できない場合は、私が書いた 2 つの記事を読んでください。理解するには勉強するのに時間がかかります。

    []==![] から true まで、JavaScript でのさまざまな面倒な型変換を分析します

    ++[[]][+[]]+[+[]]==10 から? 弱く型付けされた JS の暗黙的な変換について詳しく説明します

    上記を理解した後、これらを使用して練習できます:

    リーリー

    返事
    0
  • 怪我咯

    怪我咯2017-05-19 10:31:55

    0等于false也是隐式类型转换の一種。

    返事
    0
  • 大家讲道理

    大家讲道理2017-05-19 10:31:55

    変換はすべて偽です。

    リーリー

    もちろん、具体的な比較はルールによって異なります

    返事
    0
  • 怪我咯

    怪我咯2017-05-19 10:31:55

    0 は暗黙的に false に変換され、strict モードではエラーが報告されます。比較には === を使用することをお勧めします。

    返事
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-19 10:31:55

    JS には「==」比較のルールがあり、これはあなたの状況に特に適合します。一方の値が数値でもう一方が文字列の場合、まず文字列を数値に変換し、次に変換された値を使用します。
    つまり、等号の右側にある空の文字列「」は数字の0に変換され、左側と右側は等価になります。 == 比較変換ルールについては、js の権威あるガイドに詳しく説明されています

    返事
    0
  • 怪我咯

    怪我咯2017-05-19 10:31:55

    0 == "" // true

    この文は 0 == Number("")

    に相当します

    数値、文字列、ブール型の3種類の比較は、数値に変換してから比較します。

    返事
    0
  • キャンセル返事