5

オブジェクトのプロパティにテキストがあります。オブジェクトのプロパティに表示するテキストが含まれているかどうかをテストしています。そうでない場合は、空白ではなく「-」を表示します。次の間に違いはないようです。

if (MyObject.SomeText && MyObject.SomeText.length) { ... }

if (MyObject.SomeText && MyObject.SomeText.length > 0) { ... }

ある構文が他の構文よりも好ましいというエッジケースはありますか?

4

5 に答える 5

7

それらは同じ結果をもたらします。ところで、その「テキスト」であれば、それでif (MyObject.SomeText)十分です

于 2012-08-16T17:04:52.627 に答える
5

ある構文が他の構文よりも好ましいというエッジケースはありますか?

MyObject.SomeText期待どおりの場合とそうでない場合のエッジケースのみMyObject.SomeText.length-たとえば、次のようになります。

MyObject = {
    SomeText = {
        length: -42
        // or length: true
    }
};
于 2012-08-16T17:03:40.140 に答える
4

いいえ、それらは同等です。長さが0に等しい場合、それはとして評価されfalseます。

(これは、JSが強く型付けされていないために可能です。強く型付けされた言語では、長さはブール値としてキャストできません)。

于 2012-08-16T17:04:09.163 に答える
2

それは同じだ:

Boolean(MyObject.SomeText.length)
  • !=0のtrue場合に返されますMyObject.SomeText.length
  • ==0のfalse場合に返されますMyObject.SomeText.length

Boolean(MyObject.SomeText.length>0)
  • >0のtrue場合に返されますMyObject.SomeText.length
  • <=0のfalse場合に返されますMyObject.SomeText.length

しかし、または正のインテグラーMyObject.SomeText.lengthになることしかできません。0それで

  • MyObject.SomeText.length== 0の 場合、
    • Boolean(MyObject.SomeText.length)==0falseであるために返されますMyObject.SomeText.length
    • Boolean(MyObject.SomeText.length>0)<=0のfalseために返されますMyObject.SomeText.length
  • MyObject.SomeText.length> 0の 場合、
    • Boolean(MyObject.SomeText.length)!= 0trueであるため、MyObject.SomeText.length
    • Boolean(MyObject.SomeText.length>0)>0のtrueために返されますMyObject.SomeText.length
于 2012-08-16T17:08:43.867 に答える
2

javascriptでは、数値は0の場合にのみ「falsey」と見なされます。それ以外の値は「truthy」です。したがって、ステートメントnumber != 0(IDではなく比較)と!numberはまったく同じです。

2つのステートメントが異なる唯一の方法lengthは、正の数以外のものである場合です。

于 2012-08-16T17:04:55.740 に答える