ウェインの説明を選びたい:
<variable> = <expression> ? <true clause> : <false clause>
両方の場合を考えてみましょう。
case 1:
h.className += h.className ? 'true' : 'false'
- 代入演算子は正常に機能し、値が追加されます
- 初めて実行するとき、o / p:false
- 2回目。o / p:falsetrue-値は追加され続けます
case2:h.className = h.className + h.className?'真/偽'
- 結果はケース1と同じではありません
- 初めて実行するとき、o / p:false
- 2回目。o / p:false-値が追加され続けない
explanation
上記のコードでは、ケース1は正常に機能します
一方、case2:
h.className = h.className + h.className ? 'true' : 'false'
is executed as
h.className = (h.className + h.className) ? 'true' : 'false'
h.className + h.className
=>三項演算子が優先されるため、三項演算子の式と見なされます。したがって、常に3項式の結果が割り当てられます
角かっこを使用して優先順位を定義する必要があります
ケース2がケース1として機能するためには、括弧を使用して検討する評価の順序を定義する必要があります。
h.className = h.className + (h.className ? ' error' : 'error')