首页  >  文章  >  web前端  >  为什么我的 JavaScript 代码会因“h.className = h.className”而失败? \'错误\':\'错误\'`?

为什么我的 JavaScript 代码会因“h.className = h.className”而失败? \'错误\':\'错误\'`?

DDD
DDD原创
2024-10-31 21:46:02805浏览

Why Does My JavaScript Code Fail with `h.className  = h.className ? ' error' : 'error'`?

运算符优先级之谜:JavaScript 的三元运算符和连接

在 JavaScript 中使用三元运算符可能会令人困惑,尤其是与其他运算符混合使用时运营商。考虑以下代码片段:

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

此代码的目的是将字符串“error”附加到 HTML 元素“h”的 className 属性。但是,代码失败并出现错误。要理解其中的原因,我们需要剖析 JavaScript 中运算符的优先级。

三元运算符 (?:) 的优先级高于赋值运算符 (=)。因此,上面的代码相当于:

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

这样的解释更有意义。三元运算符检查 h.className 是否不为 null 或未定义(“真实”值)。如果为 true,则会将“error”附加到 h.className。否则,它会附加“错误”。

要修复原始代码,我们需要在括号内显式添加赋值运算符:

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

通过将赋值运算符放在括号内,我们可以覆盖优先规则并确保整个三元表达式分配给 h.className.

以上是为什么我的 JavaScript 代码会因“h.className = h.className”而失败? \'错误\':\'错误\'`?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn