以下の条件付き構文の主な違いは何ですか?
if (something) {
// do something
}
対。
if (something == true) {
// do something
}
違いはありますか?
編集:申し訳ありません。質問されたときにタイプミスをしました。等号を 3 つ入れるつもりはありませんでした。三重等号が厳密な演算子であることは知っています。「==」がif(何か)と同等かどうかを尋ねるつもりでした。
以下の条件付き構文の主な違いは何ですか?
if (something) {
// do something
}
対。
if (something == true) {
// do something
}
違いはありますか?
編集:申し訳ありません。質問されたときにタイプミスをしました。等号を 3 つ入れるつもりはありませんでした。三重等号が厳密な演算子であることは知っています。「==」がif(何か)と同等かどうかを尋ねるつもりでした。
違いは、 inif(something)がsomethingboolean として評価されることです。基本的には
if(ToBoolean(something))
ここToBooleanで、引数をブール値に変換するために呼び出される内部関数です。ToBoolean二重否定でシミュレートできます: !!something。
2 番目のケースでは、両方のオペランドが (最終的に) 最初に数値に変換されるため、最終的には次のようになります。
if(ToNumber(something) == ToNumber(true))
これは非常に異なる結果につながる可能性があります。繰り返しToNumberますが、内部関数です。単項プラス演算子:を使用して (ある程度) シミュレートできます+something == +true。実際のアルゴリズムでは、 がオブジェクトの場合somethingに最初に渡され ます。ToPrimitivesomething
例:
と仮定する
var something = '0'; // or any other number (not 0) / numeric string != 1
if(something)は空でない文字列であるtrueため、になります。'0'
if(something == true)になりますfalseので、ToNumber('0')は0、ToNumber(true)は1および0 == 1はfalse。
===編集:以下は、演算子が使用された元の質問にのみ当てはまります。
最初のものは if ステートメントの本体を実行する ifsomethingが「真実」であるのに対し、2 番目のものは型と値が と等しい場合にのみそれを実行しますtrue。
では、「真実」とは?それを理解するには、その反対が何であるかを知る必要があります: falsey. JavaScript のすべての値は、条件式に配置された場合、強制的にブール値になります。誤った値のリストは次のとおりです。
false0(ゼロ)""(空文字列)nullundefinedNaN他のすべての値は真実ですが、誰かがコメントで指摘するであろういくつかのあいまいなコーナーケースを見逃している可能性があります。
更新された質問に対する私の答えは次のとおりです。
条件付きこれは間違っています。Felix Kling's answerを参照してください。if (something)とif (something == true)は同等ですが、2 番目は冗長です。somethingどちらの場合も同じ方法で型強制されます。
if(something)と同等if(someting == true)です。
==演算子は、同一性をチェックしながら、等しいかどうかを===チェックします。この場合、真の値は最初trueの条件の条件を満たしますが、2 番目の条件の条件のみを満たします。
編集:フェリックス・クリングの答えは正しいです。代わりに参照してください。
質問が から===に変わったので==、いいえ、実質的な違いはありません。
それを見るにはいくつかの方法があります。最初の例は、「何か」が真のような値または正の値を持つかどうかを評価します。したがって、0、負、null、または空でない限り、その if ステートメントの内容を評価する必要があります。
2番目のステートメントでは、「何か」がブール値のtrueに相当するかどうかをテストしています。別の単語「TRUE」または 1。「===」比較を実行して、比較対象と同一にすることもできます。したがって、この場合、何か === true を実行した場合、「何か」はブール値の true である必要があり、値 1 では不十分です。
2 つの条件に違いはなくthing == true、単にthing.
thing === trueただし、と だけでは大きな違いがありthingます。
JavaScript では、値が条件に置かれると、値はブール値に強制されます。trueこれは、すべての型のすべての値を または のいずれかに強制できる必要があることを意味しますfalse。true一般に、強制される値は「真実」と呼ばれ、強制される値falseは「偽」と呼ばれます。
「誤った」値は次のとおりです。
NaN(数字ではありません)''(空文字列)undefinednull0(数値 0)他のすべてはtrue、強制されたときに評価されます。この jsFiddleは、何が「真実」で何が「偽り」かを追跡するのに役立ちます。
同一性演算子 ( ===) は型強制を実行しません。型が異なる場合、比較はすぐに失敗します。