是否有任何理由在条件中使用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. JSON.stringify返回“[object Object]”而不是对象
- 7. JQuery附加'[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. like if in if
- 16. if if in PHP
- 17. AS3> performance> if(myBooleanField)* VS * if(myObjectField!= null)* VS * if(myIntField!= 0)
- 18. insertExisting object而不是insertNewObjectForEntityForName
- 19. 为什么铸造Object(null)不为null?
- 20. 如何设置“if object exists”的条件?
- 21. python else if undefined error,view other object
- 22. $(this).attr('img')返回null或[object Object]不是值
- 23. MQL4:Object =(Class *)NULL;
- 24. null是否有Object类型?
- 25. Handlebars #if #each in #if
- 26. NPE in channel.write(Object message)
- 27. why({} + {})=“[object Object] [object Object]”?
- 28. if(null!=变量)为什么不是if(变量!= null)
- 29. 在hibernate上返回成员对象而不是Object [] row =(Object [])ite.next();
- 30. Respond_with JSON @object发送关联对象,而不是@object?
什么时候对象=== 0? – cHao
甚至对象===假 –
..或对象===未定义 –