以下の条件付き構文の主な違いは何ですか?
if (something) {
// do something
}
対。
if (something == true) {
// do something
}
違いはありますか?
編集:申し訳ありません。質問されたときにタイプミスをしました。等号を 3 つ入れるつもりはありませんでした。三重等号が厳密な演算子であることは知っています。「==」がif(何か)と同等かどうかを尋ねるつもりでした。
以下の条件付き構文の主な違いは何ですか?
if (something) {
// do something
}
対。
if (something == true) {
// do something
}
違いはありますか?
編集:申し訳ありません。質問されたときにタイプミスをしました。等号を 3 つ入れるつもりはありませんでした。三重等号が厳密な演算子であることは知っています。「==」がif(何か)と同等かどうかを尋ねるつもりでした。
違いは、 inif(something)
がsomething
boolean として評価されることです。基本的には
if(ToBoolean(something))
ここToBoolean
で、引数をブール値に変換するために呼び出される内部関数です。ToBoolean
二重否定でシミュレートできます: !!something
。
2 番目のケースでは、両方のオペランドが (最終的に) 最初に数値に変換されるため、最終的には次のようになります。
if(ToNumber(something) == ToNumber(true))
これは非常に異なる結果につながる可能性があります。繰り返しToNumber
ますが、内部関数です。単項プラス演算子:を使用して (ある程度) シミュレートできます+something == +true
。実際のアルゴリズムでは、 がオブジェクトの場合something
に最初に渡され ます。ToPrimitive
something
例:
と仮定する
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 のすべての値は、条件式に配置された場合、強制的にブール値になります。誤った値のリストは次のとおりです。
false
0
(ゼロ)""
(空文字列)null
undefined
NaN
他のすべての値は真実ですが、誰かがコメントで指摘するであろういくつかのあいまいなコーナーケースを見逃している可能性があります。
更新された質問に対する私の答えは次のとおりです。
条件付きこれは間違っています。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
(数字ではありません)''
(空文字列)undefined
null
0
(数値 0)他のすべてはtrue
、強制されたときに評価されます。この jsFiddleは、何が「真実」で何が「偽り」かを追跡するのに役立ちます。
同一性演算子 ( ===
) は型強制を実行しません。型が異なる場合、比較はすぐに失敗します。