
本文讲解如何在使用模板字符串(template literal)时,正确通过三元运算符动态插入 css 样式值,避免因引号嵌套错误或字符串拼接不当导致的 nan 或语法异常问题。
本文讲解如何在使用模板字符串(template literal)时,正确通过三元运算符动态插入 css 样式值,避免因引号嵌套错误或字符串拼接不当导致的 nan 或语法异常问题。
在前端开发中,尤其是使用如 Grid.js 这类基于 JavaScript 构建表格的库时,常需根据数据状态动态控制元素样式(例如图标颜色)。常见需求是:当 cell.amount 为真值(如非零、非 null、非 undefined)时显示绿色,否则显示红色。
但初学者容易在字符串拼接中误用引号和加号,例如原代码:
style='color: " + cell.amount ? + " 'green' " : " 'red' '
该写法存在两个关键问题:
- ❌ 错误混用普通字符串拼接(+)与模板字符串(反引号);
- ❌ 多余的引号嵌套导致 JS 解析失败,最终 cell.amount ? ... 表达式未被求值,而是作为字面量拼接,进而引发 NaN 或渲染异常。
✅ 正确做法是统一使用模板字符串,并借助 ${} 插值语法嵌入表达式:
formatter: (cell) => html(`<b style="color: ${cell.amount ? 'green' : 'red'}">${cell}</b>`)
✅ 注意:此处推荐使用双引号包裹 style 属性值("color: ..."),内部用单引号定义颜色字符串('green'),避免引号冲突;当然也可全部使用反引号或转义,但简洁清晰更佳。
此外,还需注意逻辑健壮性。若 amount 可能为 0、''、null 或 undefined,而业务上“金额为 0”仍属有效状态(即不应标红),建议显式判断:
formatter: (cell) => html(`
<b style="color: ${cell.amount != null && cell.amount !== '' && Number(cell.amount) >= 0 ? 'green' : 'red'}">
${cell}
</b>
`)
或封装为可复用的工具函数:
const getAmountColor = (amount) => {
return Number(amount) > 0 ? 'green' : 'red';
};
// 在 formatter 中调用
formatter: (cell) => html(`<b style="color: ${getAmountColor(cell.amount)}">${cell}</b>`)
? 总结:
- 动态样式必须在模板字符串中用 ${expression} 插值,而非 + 拼接;
- 避免引号嵌套混乱,优先使用外双内单(或外单内双);
- 条件判断应贴合业务语义,必要时做类型校验与空值防护;
- 复杂逻辑建议抽离为独立函数,提升可读性与可维护性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











