Javascript 三元运算符的运算符优先级

我似乎不能把我的头绕在这个代码的第一部分(+=)与三元运算符的组合。

h.className += h.className ? ' error' : 'error'

我认为这段代码的工作方式如下:

h.className = h.className + h.className ? ' error' : 'error'

但这是不正确的,因为这会在我的控制台中产生错误。

所以我的问题是我应该如何正确插入此代码?


答案 1
h.className = h.className + (h.className ? ' error' : 'error')

您希望操作员为 工作,最好具体说明。
当然,不应该有伤害,但这是另一回事。h.classNameh.className += ' error'

另外,请注意,它优先于三元运算符:JavaScript 运算符优先级+


答案 2

可以这样想:

<variable> = <expression> ? <true clause> : <false clause>

语句的执行方式基本如下:

  1. 是评估为真,还是评估为假?<expression>
  2. 如果计算结果为 true,则忽略 分配给 的值,并执行下一条语句。<expression><true clause><variable><false clause>
  3. 如果计算结果为 false,则忽略 ,并将 的值分配给 。<expression><true clause><false clause><variable>

在这种语言和其他语言中,使用三元运算符要实现的重要一点是,无论代码中的代码在评估时都应产生布尔结果:true或false。<expression>

在您的示例中,将我的解释中的“分配给”替换为“添加到”,或者对于您正在使用的任何速记算术(如果有)或类似。