2

javascriptのような弱い型の言語では、使用することの間に大きな違いがあるのだろうかと思いました

var someBool=true;
if (someBool==true){
    //Somecode
}

または単に使用する

if(someBool){
  //Somecode
} 

実行速度に違いはありますか、それともセマンティックな違いがありますか、それとも一方が他方よりも優先されますか?

4

3 に答える 3

4

セマンティックの違いはかなり大きく、次のとおりです。

if (x)

セマンティクスがあります:

  • の値を決定しますx
  • 値が未定義、null、ゼロ、NaN、空の文字列、または false の場合、条件は false と見なされ、それ以外の場合は true と見なされます。

if (x==true)

セマンティクスがあります:

  • の値を決定しますx
  • 値が true の場合、条件は true です。
  • 値が false の場合、条件は false です。
  • それ以外の場合は、ユーザーが実際に書いたふりをします

if (x==1)

そして最初からやり直します。

式が 1 に等しいかどうかを判断するためのロジックをすべて説明するつもりはありません。詳細が必要な場合は、ECMAScript 仕様のリビジョン 3 のセクション 11.9.3 を参照してください。

于 2013-02-26T16:01:30.453 に答える
2

はい、少し意味的な違いがあります。==値のタイプが異なる場合 (たとえば、ブール値と数値の比較における JavaScript の真偽Javascripts If ステートメントのセマンティクスとは)がある場合、比較はより多くのことを行いますが、真実性ifのみをチェックします。

ただし、someBoolが常にブール値であることがわかっている場合は、と比較するのではなくtrue、常に 2 番目のバリアントを使用してください。

于 2013-02-26T15:18:58.183 に答える
1

someBool実際に であることを確認したい場合trueは、厳密な等値コンパレータ ( ===)を使用します。

var someBool = 1;

someBool == true;  // true
someBool === true; // false

これは他のタイプでも機能します。

0 == "0";  // true
0 === "0"; // false

==他の人が指摘したように、同等性のテスト ( を使用) と「真実性」のテスト( のみを使用)には違いがありますif()。これについて知っておくことは間違いなく価値がありますが、個人的には、意味が 100% 明確でないコードを書くことは避けようとしています。変数の名前 ( ) を考えるとsomeBool、ブール値が期待されるので、ブール値をテストします。より大きいかどうかを知りたい場合は0、代わりにそれをテストします ( someNumber >== 0)。

パフォーマンスに関しては; 通常、厳密な等値コンパレータはを使用するよりも少し高速==ですが、違いはごくわずかです。真実性をテストする方が少し速いかもしれませんが、これはまだマイクロ最適化であり、問​​題を起こす価値はほとんどありません。

于 2013-02-26T15:28:30.510 に答える