用于多个条件检查的 JavaScript 语法

JavaScript syntax for multiple condition checking

本文关键字:JavaScript 语法 检查 条件 用于      更新时间:2023-09-26

我想编写一个JS条件来禁用以下条件的保存按钮;

  1. 如果状态为"已关闭"或
  2. 如果我的模型没有UPDATE_GLOBAL和UPDATE_LOCAL权限

我编写了以下代码;

if ((self.model.get("status") === "CLOSED") || (!self.model.hasPrivilege("UPDATE_GLOBAL") && !self.model.hasPrivilege("UPDATE_LOCAL"))) {
    $("#save").attr("disabled", true);
}

这是最佳优化代码吗?还有没有多余的括号(总是让我感到困惑)?

你说过

如果我的模型没有UPDATE_GLOBAL和UPDATE_LOCAL特权

。但这不是这部分条件所检查的。它正在检查您是否没有两者;如果只有一个,则检查结果不正确。

如果您希望在状态 = CLOSED 时禁用按钮,或者您的模型没有这两个权限,则:

if (self.model.get("status") === "CLOSED" || !(self.model.hasPrivilege("UPDATE_GLOBAL") && self.model.hasPrivilege("UPDATE_LOCAL"))) {
    $("#save").attr("disabled", true);
}

还有没有多余的括号(总是让我感到困惑!!

是的,你不需要self.model.get("status") === "CLOSED"周围的括号(但它们是无害的)。


另请注意,您的代码永远不会启用该按钮,它只是禁用它或将其保留。如果您还想在禁用条件不为 true 时启用它,则:

$("#save").attr("disabled", self.model.get("status") === "CLOSED" || !(self.model.hasPrivilege("UPDATE_GLOBAL") && self.model.hasPrivilege("UPDATE_LOCAL")));

或(更易于调试):

var flag = self.model.get("status") === "CLOSED" || !(self.model.hasPrivilege("UPDATE_GLOBAL") && self.model.hasPrivilege("UPDATE_LOCAL"));
$("#save").attr("disabled", flag);

我会这样说:

if (self.model.get("status") === "CLOSED" || !(self.model.hasPrivilege("UPDATE_GLOBAL") && self.model.hasPrivilege("UPDATE_LOCAL")))