You need to enable JavaScript to run this app. Shopify使用JavaScript格式化货币调用formatMoney报错解决方案问询
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 15:30:03