if ( object != null )
より簡潔なものではなく、条件付きで使用する理由はありますかif ( object )
?前者の方がよく見かけますが、両者は同等で後者は短いようです。
3 に答える
オブジェクトが異なれば、扱いも異なります。nullになることはなく、望まないときに誤ってfalseをトリガーする可能性のある値がいくつかあります。
ブール値をnullにすることはできません。ブール値が定義されているが値が指定されていない場合は、falseとして扱われます。
var bool:Boolean;
trace(bool); // false
bool = true;
trace(bool); // true
intもnullになることはありません。intが定義されているが値が指定されていない場合、それは0として扱われます。
var i:int;
trace(i); // 0
trace(Boolean(i)); // false
i = -1;
trace(Boolean(i)); // true
i = 0;
trace(Boolean(i)); // false
i = 1;
trace(Boolean(i)); // true
数値はintと同様に機能します。数値が定義されているが値が指定されていない場合、NaNとして扱われます
var num:Number;
trace(num); // NaN
trace(Boolean(num)); // false
num = -1.1;
trace(Boolean(num)); // true
num = 0;
trace(Boolean(num)); // false
num = 1.1;
trace(Boolean(num)); // true
文字列は最悪です。文字列が定義されているが値が指定されていない場合、それはnullとして扱われます!
var str:String;
trace(str); // null
trace(Boolean(str)); // false
str = ""
trace(Boolean(str)); // false
str = "hello";
trace(Boolean(str)); // true
私のコードでは、ほとんどの場合、私が本当に気にかけているより具体的な何かがあるので、「if(obj)」のみを実行することは非常にまれです。
次のコードではfalse
、オブジェクトがnullでなくても、オブジェクトはに評価されます。
class SomeWrapper
{
var value: Object;
SomeWrapper(Object value)
{
this.value = value;
}
/// Overriden method from Object, see ActionScript 3 reference
function valueOf()
{
return value;
}
}
var myWrapper = new SomeWrapper(false);
if(myWrapper)
{
trace("myWrapper evaluates to true.");
}
else
{
trace("myWrapper evaluates to false.");
}
else
ブロックは上記の例で実行されます。これは、null参照ではない場合でも、myWrapper
評価されるためfalse
(そのvalueOf
メソッドはラッパーに含まれる値を返します。この場合false
) 。myWrapper
問題は、上記が参照のnull可能性をテストするだけでなくvalueOf
、FlashPlayer仮想マシンのおかげで暗黙的にメソッドを呼び出すことです。もちろん、この動作は希望どおりである場合とそうでない場合がmyWrapper
あります。null値であるかどうか、またはnull値を持っているかどうかをテストしますか?(または両方)。
この場合の冗長性は友だちです。そうでない場合は、潜在的なランタイムエラーと引き換えにコードの可読性が向上します。
if (expression)
expression
ブール値を取得することにより、の真実性をテストします。null
とundefined
はどちらも偽物であるため、nullでないif (object)
ことを確認するための「動作」object
。
問題は、しかし0
、、、false
そしてまた偽物です。を使用すると、nullの場合に実行を阻止しようとしているコードは、がゼロ、空の文字列、または実際のブール値の場合にも無視されます。多くの場合、それはあなたが望むものではありません。''
if (object)
object
false
object
null、または文字列、数値、ブール値以外の型(またはそれぞれのオブジェクト型)のいずれかを保証できない場合は、意図しif (object != null)
ないものを意味する可能性は低くなります。