当我决定使用经典javascript构建普通的Web表单验证时,出现奇怪的错误。有几个用于输入文本字段的“onblur”处理程序和一个“表单提交”处理程序。JavaScript是否在布尔表达式中使用优化?
当我使用他们喜欢的是:“passwordCheck”如果loginCheck失败从来没有所谓:
function loginCheck() {
... return true of false
}
function passwordCheck() {
...
}
function formValidation() {
return loginCheck() && passwordCheck();
}
,因为我希望它不工作!
最后,我有解决办法
function formValidation() {
ok = loginCheck();
ok &= passwordCheck();
return ok;
}
现在执行密码检查。但是,当我选择:
function formValidation() {
ok = loginCheck();
ok = ok && passwordCheck();
return ok;
}
passwordCheck永远不会再次调用如果loginCheck失败。
此外:loginCheck & passwordCheck返回布尔值,但& =运算符将其转换为“0”或“1”。 “0”对我的onsubmit="return checkForm"
处理程序不起作用。我不得不将我& =结果再次布尔:
function formValidation() {
ok = loginCheck();
ok &= passwordCheck();
return ok != 0;
}
这是JavaScript引擎一种正常的行为?
'&'是按位与,并将始终返回一个数字。 '&&'是逻辑与,并且将返回表达式的值,它决定了整体结果。将任何值转换为布尔值的快捷方式是使用双重否定'!!'。 –
可以以某种方式改变可怕的标题?我想不出那些清晰而又有吸引力的东西。 – Lekensteyn
如果在登录检查失败后需要进行密码检查,则需要进行一些重构。 – hyperslug