单线检查对象及其方法是不是都已定义[重复]
Posted
技术标签:
【中文标题】单线检查对象及其方法是不是都已定义[重复]【英文标题】:One-liner to check if object and its method are both defined [duplicate]单线检查对象及其方法是否都已定义[重复] 【发布时间】:2012-10-25 06:55:38 【问题描述】:可能重复:In javascript, test for property deeply nested in object graph?
我只想在 obj.method1.mthod2 为真时运行此代码块。 但是当 obj 本身未定义时,可能会出现这种情况。或 method1 未定义。
if (obj.method1.method2)
那么我应该这样做吗?
if (typeof(obj)!="undefined" && typeof(obj.method1)!="undefined" && typeof(obj.method1.method2)!="undefined" && obj.method1.method2)
看起来很丑!有什么办法可以缩短吗? 我已经看到了这个Detecting an undefined object property 链接,但它没有帮助。
【问题讨论】:
typeof
不需要括号,因为它是运算符而不是函数,因此每次使用时都会为您节省一个字符。 (例如,if (typeof obj!="undefined")
。)
In javascript, test for property deeply nested in object graph? 和 Shorthand function for checking whether a property exists 和其他人的可能重复。
【参考方案1】:
我通常是这样写的:
if (typeof(obj) != "undefined" && obj.method1 && obj.method1.method2)
// The magic
不过,我主要使用函数来执行此操作,因为我很确定某些原始类型的实例会评估为 false,即使它们不是未定义的。
edit:正如 lanzz 在评论中指出的那样,obj 需要一个 typeof。
【讨论】:
在 Chrome 中引用未定义的obj
会抛出 ReferenceError: obj is not defined
。
好。每个 IF 语句至少只有一种 typeof :)
不应该是typeof(obj) !== "undefined"吗?【参考方案2】:
更简洁:
if (obj && obj.method1 && obj.method1.method2)
...
【讨论】:
【参考方案3】:试试try
try
if(obj.method1.method2)
alert("ok!");
catch(e)
alert("obj or some property not defined");
【讨论】:
以上是关于单线检查对象及其方法是不是都已定义[重复]的主要内容,如果未能解决你的问题,请参考以下文章