'<option value="FF" ' + tmconfig["rvaltype"] == 'FV' ? 'selected' : '' + '>公式</option>'
輸出:>公式</option>(前半部分丟失)。
JS/Java 中 + 優先級 **高於** == 和 ?:。
實際解析順序:
1. '<option value="FF" ' + tmconfig["rvaltype"] → 字符串拼接
2. 結果 == 'FV' → boolean
3. boolean ? 'selected' : '' → 'selected' 或 ''
4. 結果 + '>公式</option>' → 最終字符串
**導致前綴字符串參與了比較,邏輯完全錯亂。**
'<option value="FF" ' + (tmconfig["rvaltype"] == "FV" ? "selected" : "") + '>公式</option>'
執行順序:
1. (tmconfig["rvaltype"] == "FV" ? "selected" : "") → 先算三元表達式
2. 左右兩側 + 拼接 → 完整 option 標簽
// ES6 模板字面量(推薦,可讀性最高)
``
// 或使用成熟模板引擎:Handlebars, EJS, Thymeleaf (Java), FreeMarker
**字符串拼接含三元/邏輯判斷時,三元表達式必須用括號包裹**;長字符串拼接優先用模板字面量/模板引擎,消除優先級陷阱、提升可讀性。