为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

千巷猫影 2019-10-17 13:07:06
我似乎无法与三元运算符结合使用此代码的第一部分(+ =)。h.className += h.className ? ' error' : 'error'我认为这段代码的工作方式如下:h.className = h.className + h.className ? ' error' : 'error'但这是不正确的,因为这会导致控制台出现错误。所以我的问题是我应该如何正确插入此代码?
查看完整描述

3 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

这样想:


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

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


不<expression>计算为true,或者它评估为假的?

如果<expression>计算结果为true,则将的值<true clause>赋给<variable>,将<false clause>被忽略,并执行下一条语句。

如果<expression>计算结果为false,则将<true clause>其忽略,并将的值<false clause>分配给<variable>。

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


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


查看完整回答
反对 回复 2019-10-17
?
慕标5832272

TA贡献1966条经验 获得超4个赞

可以执行所需的+=操作,但是在其右侧的三元语句中,它将检查是否h.className为假,如果未定义则为假。如果是事实(即,如果已经指定了一个类名),则错误添加一个空格(即添加一个新的类),否则添加一个不带空格的错误。


该代码可以按照您的建议进行重写,但是您需要指定该h.className值用于三元运算符中的真实性比较,而不是使用其实际值,因此请确保不要打扰值的串联在执行三元操作的同时:


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


查看完整回答
反对 回复 2019-10-17
  • 3 回答
  • 0 关注
  • 1025 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信