Shopify使用JavaScript格式化货币调用formatMoney报错解决方案问询
报错原因
你调用Shopify.formatMoney时传入的第二个参数'$'不符合函数的格式要求:
- 函数内部通过正则
/\{\{\s*(\w+)\s*\}\}/匹配格式字符串中的{{amount}}类占位符,纯字符$中没有对应占位符,导致formatString.match(placeholderRegex)返回null - 代码直接访问
null[1]触发类型错误
解决方法
快速修复(直接得到预期的$20.00)
将调用代码修改为传入包含{{amount}}占位符的格式字符串:
Shopify.formatMoney(2000, '${{amount}}')
全局配置方案
如果全站货币格式固定为$xx.xx,可以先设置全局默认格式,后续调用无需传第二个参数:
// 全局配置只需执行一次 Shopify.money_format = '${{amount}}'; // 后续直接调用即可 Shopify.formatMoney(2000);
可选:优化代码避免同类报错
可以给原Gist代码增加异常兼容逻辑,在格式字符串不符合要求时自动 fallback 到默认格式:
找到原代码中switch代码块,修改为如下内容:
const matchResult = formatString.match(placeholderRegex); // 匹配不到占位符时使用默认格式 if (!matchResult) { formatString = this.money_format; } switch(formatString.match(placeholderRegex)[1]) { // 原有case逻辑保持不变 case 'amount': value = formatWithDelimiters(cents, 2); break; case 'amount_no_decimals': value = formatWithDelimiters(cents, 0); break; case 'amount_with_comma_separator': value = formatWithDelimiters(cents, 2, '.', ','); break; case 'amount_no_decimals_with_comma_separator': value = formatWithDelimiters(cents, 0, '.', ','); break; }
内容的提问来源于stack exchange,提问作者Marian07
相关产品推荐
相关产品推荐

