You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Highlight.js搭配Marked报错:TypeError: (e || "").toLowerCase不是函数

问题原因及解决方法

问题根源

你调用hljs.highlight时传入了语言对象(通过hljs.getLanguage(lang)获取的结果),但Highlight.js的highlight方法要求language参数是语言名称字符串。内部代码尝试对该参数执行toLowerCase()方法时,因对象没有这个方法而抛出错误。

修正后的代码

将高亮分支的代码修改为直接传入语言名称字符串:

const markedRenderer = new marked.Marked(
  markedHighlight.markedHighlight({
    langPrefix: 'hljs language-',
    highlight(code, lang) {
      const trimmedLang = ('' + lang).trim();
      if (['nohighlight', 'plaintext'].includes(trimmedLang)) {
        return code;
      } else {
        if (!hljs.getLanguage(trimmedLang)) {
          return hljs.highlightAuto(code).value;
        } else {
          // 直接传入语言名称字符串,而非语言对象
          return hljs.highlight(code, { language: trimmedLang, ignoreIllegals: true }).value;
        }
      }
    }
  })
);

补充说明

  • hljs.getLanguage(lang)仅用于验证语言是否存在,不需要将返回的对象传递给highlight方法,该方法内部会自行根据语言名称查找对应的定义。
  • 修改后,指定已知语言(如c)的代码块将正常触发高亮,自动高亮和纯文本分支的功能不受影响。

内容的提问来源于stack exchange,提问作者igorludi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:24:51