是否有任何理由在條件中使用if (object != null)
而不是更簡潔的if (object)
。我更經常地看到前者,但似乎兩者相當,後者更短。if(object!= null)而不是if(object)in AS3
回答
下面的代碼將有一個對象計算爲false
,即使對象不爲空:
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
塊將在上面的例子中執行,因爲myWrapper
計算結果爲false
(其valueOf
方法返回無論封裝器包含什麼值,在這種情況下爲false
),即使myWrapper
不是空引用。問題是,上面確實不僅僅是測試的可參考性,它隱含地調用了valueOf
方法,由Flash Player虛擬機提供。當然,這種行爲可能是也可能不是你想要的 - 你想測試myWrapper
是否爲空值或是否攜帶空值? (或者兩者都有)。
在這種情況下的詳細程度是你的朋友,否則你獲得代碼可讀性以迴應潛在的運行時錯誤。
感謝您的迴應,特別是'valueOf'的分析和示例。我還會在0和''中添加特別的評論以及其他對這個傑出貢獻的答案。 –
@StevenXu,不客氣。我不確定你想添加什麼,但如果你詳細說明,我可以編輯它。我認爲其他答案也涵蓋了我的答案沒有的東西。 – amn
if (expression)
通過獲取其布爾值來檢驗expression
的真實性。由於null
和undefined
都是虛假的,因此if (object)
「有效」以確保object
不爲空。
問題是,雖然,0
,false
,和''
是也 falsy。在使用if (object)
時,如果object
爲零,一個空字符串或實際布爾值爲false
,那麼當它試圖保持空運行的代碼也將被忽略。通常情況下,這不是你想要的。
如果你不能保證object
是null或類型其他不是字符串,數字或布爾值(或各自的對象類型),然後if (object != null)
不太可能意味着什麼意外。
不同的對象被區別對待。有些值永遠不會爲空,並且在您不需要時可能會錯誤地觸發false。
布爾值永遠不能爲空。 如果定義了布爾值但未給定值,則將其視爲false;
var bool:Boolean;
trace(bool); // false
bool = true;
trace(bool); // true
INT不能爲空爲好。 如果定義了一個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
數起類似的詮釋。 如果數量被定義但不是給定的值時,它被處理爲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
字符串是最差的。 如果定義了字符串但沒有給定值,則將其視爲空值!
var str:String;
trace(str); // null
trace(Boolean(str)); // false
str = ""
trace(Boolean(str)); // false
str = "hello";
trace(Boolean(str)); // true
這是在我的代碼非常罕見的,我只是做「如果(OBJ)」,因爲大多數的時候有更具體的,我真正關心的東西。
感謝您指出0和''的情況! –
- 1. If-satement and loop in object arraylist
- 2. Null Object In Retrofit2
- 3. jQuery if object is present
- 4. if(<object> == <int>)
- 5. '[object Object]'而不是實際數組
- 6. JQuery附加'[object,Object]'而不是圖片
- 7. JSON.stringify返回「[object Object]」而不是對象
- 8. for(var propertyName in object)vs for(propertyName in object)?
- 9. [object Null]&[object Undefined]是否尚未實現?
- 10. 爲什麼JavaScript從valueOf()而不是[object]返回[object Object]?
- 11. (count!= null)vs if(!count)in javascript
- 12. Databinding combobox column to object(or null)in DGV
- 13. object x = null和object x =(object)null有什麼區別?
- 14. 「object = this」in java
- 15. AS3> performance> if(myBooleanField)* VS * if(myObjectField!= null)* VS * if(myIntField!= 0)
- 16. 爲什麼鑄造Object(null)不爲null?
- 17. insertExisting object而不是insertNewObjectForEntityForName
- 18. if if in PHP
- 19. like if in if
- 20. python else if undefined error,view other object
- 21. 如何設置「if object exists」的條件?
- 22. $(this).attr('img')返回null或[object Object]不是值
- 23. Location.getLongitude()null object reference
- 24. MQL4:Object =(Class *)NULL;
- 25. null是否有Object類型?
- 26. Handlebars #if #each in #if
- 27. getElementByID in javascript [object HTMLSpanElement]
- 28. NPE in channel.write(Object message)
- 29. why({} + {})=「[object Object] [object Object]」?
- 30. if(null!=變量)爲什麼不是if(變量!= null)
什麼時候對象=== 0? – cHao
甚至對象===假 –
..或對象===未定義 –