我有几个if语句用于验证目的。
现在的问题是验证的顺序不如我预期的那样。
例如,我想检查名称字段是否为空,如果为空,请检查它是否在2到30个字符之间。但是当我测试它时,如果我将名称保留为空白,它首先会给出错误“名称必须在2到30个字符之间”。它似乎跳过了第一个if声明。
那么,为什么会这样呢?为什么它不按顺序执行
if (Validator.isEmpty(data.name)) {
errors.name = "Name field is required";
}
if (!Validator.isLength(data.name, { min: 2, max: 30 })) {
errors.name = "Name must be between 2 and 30 characters";
}
if (Validator.isEmpty(data.email)) {
errors.email = "Email field is required";
}
if (!Validator.isEmail(data.email)) {
errors.email = "Email is invalid";
}
它确实按顺序执行,但是你的第二个if
只是覆盖了第一个if的消息。如果第一个if为true,则需要添加代码以结束处理,或者在第二个时使用else if
for。
看看2个片段,看看差异。如果你只使用if (true)
,每一个都会执行。要只执行一次,请使用if else ()
。
if (true) {
console.log("First statement is true!");
}
if (true) {
console.log("Second statement is true!");
}
if (true) {
console.log("Third statement is true!");
}
if (true) {
console.log("First statement is true!");
}
else if (true) {
console.log("Second statement is true!");
}
else if (true) {
console.log("Third statement is true!");
}
在你的情况下,它都执行了,但是由于第二个执行在第一个之后,errors.name
的值是第二个但不是第一个。