javascript在布尔表达式中使用优化吗?
Does javascript use optimization in boolean expressions?
当我决定用经典javascript构建普通的web表单验证时,我有奇怪的错误。有几个用于输入文本字段的"onblur"处理程序和一个"form-submit"处理程序。
当我这样使用它们时:
function loginCheck() {
... return true of false
}
function passwordCheck() {
...
}
function formValidation() {
return loginCheck() && passwordCheck();
}
它不像我期望的那样工作:如果loginCheck失败,"passwordCheck"永远不会调用!
最后我有了变通办法
function formValidation() {
ok = loginCheck();
ok &= passwordCheck();
return ok;
}
现在执行密码检查。但是当我选择:
function formValidation() {
ok = loginCheck();
ok = ok && passwordCheck();
return ok;
}
如果loginCheck失败,则不再调用passwordCheck。
此外:loginCheck &passwordCheck返回布尔值,但&=运算符将其转换为"0"或"1"。"0"不适用于我的onsubmit="return checkForm"
处理程序。我必须再次将&=结果转换为布尔值:
function formValidation() {
ok = loginCheck();
ok &= passwordCheck();
return ok != 0;
}
这是javascript引擎的正常行为吗?
是的,这很正常。它被称为短路求值,既方便又非常常见(即存在于许多语言中(C, c++, Java, Perl,许多其他语言),而不仅仅是JavaScript)。
应该是这样的!
引自维基百科:逻辑连接(又名&&
)如果的两个操作数都为真,则结果为真,否则为假。
换句话说,如果第一个操作数为假,则无需继续计算第二个操作数,因为结果始终为假。
if(condition1 && condition2)
等价于
if(condition1){
if(condition2){
}
}
因此,如果第一个条件为假,则不需要继续计算表达式,因为答案将保持不变。
如果要显式运行两个函数,则可以选择仅在两个函数都求值时运行&&
:
var l = loginCheck(), // will evaluate
p = passwordCheck(); // will evaluate
return l && p; // if l failed, p will be ignored, but both functions
// have been evaluated anyway
相关文章:
- 布尔表达式-与AND、OR逻辑运算符混淆以及它们的工作方式
- 什么's VBA和Javascript布尔表达式之间的区别
- webpack优化最小化返回布尔值,而不是工厂值
- 评估JavaScript中给出布尔表达式的字符串
- 从树遍历中构建布尔表达式的算法
- = vs === 布尔表达式的运算符
- ngAnimateSwap-使用布尔表达式不会按预期设置动画
- 为什么这个布尔表达式不返回 true
- 如何在复杂的布尔表达式上避免三元
- 用pegjs解析布尔表达式链
- 反转布尔表达式
- 在不带eval的Javascript中计算字符串中的布尔表达式
- 为什么这个JavaScript代码在布尔表达式不再为true之后进入for循环
- 遍历json抽象语法树来构建布尔表达式
- JavaScript布尔表达式中的多个比较运算符
- javascript在布尔表达式中使用优化吗?
- 是Chrome Javascript评估布尔表达式正确
- 用于布尔表达式计算的Javascript eval
- 从JavaScript变量中计算布尔表达式
- AngularJS中布尔表达式的求值