Javascript 在js中使用或条件的更好方法

Javascript 在js中使用或条件的更好方法,javascript,Javascript,当我写这篇文章时,我的或条件起作用 const role = "admin" if (role === "user" || role === "admin") { } 但是为什么我的或条件不能以这种方式工作 if (role === "user" || "admin") { } 如果我写这篇文章,它会起作用 if (role === "admin" || "u

当我写这篇文章时,我的
条件起作用

const role = "admin"
if (role === "user" || role === "admin") {

}
但是为什么我的
条件不能以这种方式工作

if (role === "user" || "admin") {

}
如果我写这篇文章,它会起作用

if (role === "admin" || "user") {

}

我想使我的
if
条件
true
两次都生效,但在第二次它不起作用。

相等运算符与or运算符具有更高的绑定,因此首先测试
角色===“user”
。如果这是错误的,因为它不是“用户”,这将是错误的。但这并不重要,因为另一方面,
“admin”
真的,而truty或false是真的

以下是OP中的3个案例:

一,

role==“user”
false
role==“admin”
true =>
(角色===“用户”| |角色===“管理员”)


二,

role==“user”
false
“admin”
真的
=>
(角色===“用户”| |“管理员”)

三,

错误,因为未定义角色。如果您用任何值实例化它,您将得到案例2


解释 为了更好地理解JS中truethy的示例列表(将执行这些示例):
  • 如果(真)
  • if({})
  • 如果([])
  • 如果(42)
  • 如果(“foo”)
  • 如果(新日期())
  • 如果(-42)
  • 如果(3.14)
  • 若有(-3.14)
  • if(无穷大)
  • if(-无穷大)

下面是JS中falsy的示例列表(它们不会被执行):
  • if(false)
  • if(空)
  • 如果(未定义)
  • 如果(0)
  • 如果(0n)
  • 如果(南)
  • 如果(“”)
  • 如果(“”)
  • if(``)
  • 如果(全部文件)

    • 因为这不是方法或工作原理。它评估左侧的条件是否真实,如果真实,则返回该条件,否则返回右侧。任何非空字符串都是truthy,因此您编写的是
      如果(角色===/*某个truthy值*/|*/*没关系,第一个值是truthy*/)
      您需要使用第一个代码段。这就是工作方式,或者说应该是工作方式


      或者,如果([“user”,“admin”].includes(role))

|
是一个运算符,并且两个示例在语法上都是正确的,但它们的含义明显不同,则可以执行
。但是,不清楚您的问题是什么。您可以始终使用RegExp.test()。我想让我的if条件在两次都是真实的,但在第二次它不起作用。第二次不起作用,因为它并不意味着你认为它能起什么作用。它“起作用”,但它的作用与第一个代码示例不同。“如果任何一方都不真实,它将返回false”-不,这是不正确的。如果两个值都不是真的,则右边的值是结果,而不是
false
.Oops。我最近学习过其他编程语言。谢谢你的更正。你能检查一下上面的问题并根据这三个案例给出你的答案吗
const role = "admin";
if (role === "user" || role === "admin") { ... }
const role = "xxx";
if (role === "user" || "admin") { ... }
 if (role === "user" || "admin") { ... }