-3

这是声明

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 中性能代码的一些信息。??

谢谢你们!

4

1 回答 1

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')等。

于 2013-05-07T00:36:13.040 回答