我有一段像这样的代码。这段代码有效,但看起来很糟糕。
if(typeof(d.object) != "undefined"){
if(typeof(d.object.property) != "undefined"){
if(typeof(d.object.property.length) != "undefined"){
// do the code
}
else alert("error");
}
else alert("error");
}
else alert("error");
有没有什么方法可以重写它,所以它做同样但更有效。特别是因为错误都是一样的。
答案 0 :(得分:7)
假设你对property
不感兴趣,如果它的长度为空或0
(或者更常见的是“Ddsorak建议的”假“),那么你可能会让它更具可读性即使不使用try/catch
:
if (d && d.object && d.object.property && d.object.property.length){
} else {
alert('error');
}
在大多数情况下,这是要走的路。
关于“falsy”,from the MDN:
任何未定义的值,null,0,NaN或空字符串 (“”)和任何对象,包括值为false的布尔对象, 传递给条件语句时评估为true
答案 1 :(得分:2)
try{
if(typeof(d.object.property.length) != "undefined"){
// do the code
}else{
throw "Value undefined";
}
}catch(e){
alert("error");
}
只要您只重构一些您知道可行的代码,这就有效,但它会使调试变得更难。
答案 2 :(得分:0)
好建议,
这是一个功能的工作!
function has(v){return typeof(v) !== "undefined";};
if(has(d) && has(d.object) && has(d.object.property) && has(d.object.property.lenth)) {
...
} else alert("error");
此致