我如何在这个if语句中简化或获得性能

时间:2013-05-07 00:33:39

标签: javascript jquery node.js

这是声明

if( validator(foo) && foo.var1 || foo.var2 || foo.var3 || foo.var4){
    //do sometihng
}else{
    //do anything because if foo.*  doesnt exists i cant do anything
}

语句说:验证器必须有效foo,并返回true,var1或var2 var3或var4必须存在。

如果有人需要解释,只需添加评论即可。这是一个简单的问题,但我试图在我的代码中获得性能。

顺便说一下。有任何书籍或教程都有关于javascript中性能代码的一些信息。??

谢谢大家!

1 个答案:

答案 0 :(得分:4)

如果validator(foo)是一项昂贵的操作,您可以颠倒测试的顺序:

if ((foo.var1 || foo.var2 || foo.var3 || foo.var4) && validator(foo)) {
} else {
}

如果validator(foo)不是特别昂贵,那么可能没有理由花时间考虑如何提高这一小段代码的性能。你的时间有更好的用途。

顺便说一句,此代码基于您的口头描述。您现在的代码与口头描述不兼容,并且很可能是错误的。在JavaScript中,false && false || true评估为true。你可能需要

if( validator(foo) && (foo.var1 || foo.var2 || foo.var3 || foo.var4)) {

此外,正如本杰明指出的那样,foo.var1并未测试foo.var1是否存在;它检查它是否存在(在foo或其原型链中),而且不是“虚假”值。 (例如,如果foo.var1为0,那么它将评估为false。)您可能正在寻找foo.hasOwnProperty('var1')等。