JavaScriptの==の判定について
黄舟
黄舟 2017-05-19 10:29:55
0
6
663

0 == "" // true

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

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

です

0 == 0

###まだ###

false == false

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全員に返信(6)
黄舟

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

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

左側のtypeof 0は数値型です

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

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

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

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

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

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

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

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

リーリー

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

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

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

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

リーリー
いいねを押す +0
刘奇

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

いいねを押す +0
大家讲道理

変換はすべて偽です。

リーリー

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

いいねを押す +0
刘奇

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

いいねを押す +0
给我你的怀抱

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

いいねを押す +0
刘奇

0 == "" // true

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

に相当します

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

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート