javascriptのような弱い型の言語では、使用することの間に大きな違いがあるのだろうかと思いました
var someBool=true;
if (someBool==true){
//Somecode
}
または単に使用する
if(someBool){
//Somecode
}
実行速度に違いはありますか、それともセマンティックな違いがありますか、それとも一方が他方よりも優先されますか?
javascriptのような弱い型の言語では、使用することの間に大きな違いがあるのだろうかと思いました
var someBool=true;
if (someBool==true){
//Somecode
}
または単に使用する
if(someBool){
//Somecode
}
実行速度に違いはありますか、それともセマンティックな違いがありますか、それとも一方が他方よりも優先されますか?
セマンティックの違いはかなり大きく、次のとおりです。
if (x)
セマンティクスがあります:
x
。if (x==true)
セマンティクスがあります:
x
。if (x==1)
そして最初からやり直します。
式が 1 に等しいかどうかを判断するためのロジックをすべて説明するつもりはありません。詳細が必要な場合は、ECMAScript 仕様のリビジョン 3 のセクション 11.9.3 を参照してください。
はい、少し意味的な違いがあります。==
値のタイプが異なる場合 (たとえば、ブール値と数値の比較における JavaScript の真偽、Javascripts If ステートメントのセマンティクスとは)がある場合、比較はより多くのことを行いますが、真実性if
のみをチェックします。
ただし、someBool
が常にブール値であることがわかっている場合は、と比較するのではなくtrue
、常に 2 番目のバリアントを使用してください。
someBool
実際に であることを確認したい場合true
は、厳密な等値コンパレータ ( ===
)を使用します。
var someBool = 1;
someBool == true; // true
someBool === true; // false
これは他のタイプでも機能します。
0 == "0"; // true
0 === "0"; // false
==
他の人が指摘したように、同等性のテスト ( を使用) と「真実性」のテスト( のみを使用)には違いがありますif()
。これについて知っておくことは間違いなく価値がありますが、個人的には、意味が 100% 明確でないコードを書くことは避けようとしています。変数の名前 ( ) を考えるとsomeBool
、ブール値が期待されるので、ブール値をテストします。より大きいかどうかを知りたい場合は0
、代わりにそれをテストします ( someNumber >== 0
)。
パフォーマンスに関しては; 通常、厳密な等値コンパレータはを使用するよりも少し高速==
ですが、違いはごくわずかです。真実性をテストする方が少し速いかもしれませんが、これはまだマイクロ最適化であり、問題を起こす価値はほとんどありません。