在使用以下script期间,如果在我在电子邮件模板中指示的列的单元格中,则存在" 0"作为一个值,它不会出现在最终发送的电子邮件中。
它被一个空字符串替换,好像该单元格是空的。
我认为问题出在该声明中:
// Replace variables from the template with the actual values from the data object.
// If no value is available, replace with the empty string.
for (var i = 0; i < templateVars.length; ++i) {
// normalizeHeader ignores ${"} so we can call it directly here.
var variableData = data[normalizeHeader(templateVars[i])];
email = email.replace(templateVars[i], variableData || "");
}
但如果我删除了布尔符号,我只留下&#34; variableData&#34;问题在空单元格上移动(显示已发送电子邮件中的0值,但空单元格返回为&#34;未定义&#34;在电子邮件文本中)。
我希望有人可以帮助我。 谢谢
答案 0 :(得分:1)
欢迎使用JavaScript,其中0,''
,""
,null
和undefined
均为false
- y。
您遇到的问题是||
执行的逻辑OR使用非严格的相等比较,因此当variableData
为0时,它会被类型转换为false
(以及选择null
和undefined
)的所需转化以及""
的替代替换。
要解决此问题,您需要在替换之前对variableData
的值进行更严格的检查。
例如,可以使用三元运算符:
var variableData = ...
variableData = (!variableData && variableData !== 0) ? "" : variableData
对于其他""
- y值,这将替换为false
,但允许替换为数值0
。另请注意String(0)
是真实的,因此如果将找到的变量作为字符串返回,则短路运算符应该产生所需的结果。