HTML5中script标签的type属性可省略,默认为text/javascript;仅type="module"有实质性行为差异,启用ES模块系统;type="application/json"等用于存储非执行数据。

不写 type 属性或 type="text/javascript":默认就是它
HTML5 中,<script></script> 标签省略 type 属性时,浏览器自动按 text/javascript 处理。显式写上 type="text/javascript" 和不写效果完全一样,纯属冗余——除非你还在维护需要兼容 HTML4 或 XHTML 的老项目。
常见错误现象:type="text/javascript" 在现代项目里反复出现,尤其在自动生成的模板或旧代码迁移中。它不会报错,但徒增字符、干扰可读性。
使用场景有限:
- 必须支持 IE8 及更早版本(它们不识别无
type的脚本) - 某些严格校验工具或 CMS 模板要求显式声明
type="module":现代模块脚本的唯一正确写法
这是目前唯一有实质性行为差异的 type 值:启用 ES 模块系统,自动开启严格模式,支持 import/export,且默认异步加载(类似 defer)。
容易踩的坑:
- 不能混用
type="module"和type="text/javascript"的全局变量——模块作用域隔离,window上找不到模块内声明的const - 本地文件系统直接双击打开 HTML 会触发 CORS 错误,必须走 HTTP 服务(如
npx serve) -
type="module"脚本无法通过document.write()注入,也不支持async+defer同时写(async已隐含)
type="application/json" 和 type="text/template":不执行,只存数据
这两个值的关键在于「浏览器跳过执行」——内容被当作文本节点保留在 DOM 中,供 JS 主动读取解析。
把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。
使用场景明确:
-
type="application/json":嵌入配置或初始数据,避免字符串拼接 HTML 或额外 AJAX 请求;读取时用JSON.parse(script.textContent) -
type="text/template":配合前端模板引擎(如 Handlebars、Underscore),把模板 HTML 写在<script></script>里,避免被渲染又不用display:none污染结构
注意点:type="application/json" 的内容必须是合法 JSON(不能有注释、尾逗号),否则 JSON.parse() 报 SyntaxError;而 type="text/template" 里的 HTML 不受 HTML 解析器约束,可以写未闭合标签或占位符。
其他 MIME 类型基本可以忽略
text/ecmascript、application/ecmascript、application/javascript 这些在规范里存在,但实际没区别,现代浏览器全当作 JavaScript 执行。连 MDN 都不推荐使用它们。
text/babel 或 text/typescript 属于历史遗留方案:依赖额外运行时(如 Babel Standalone)做客户端转译,性能差、调试难、已淘汰。现在都该走构建流程预编译。
真正容易被忽略的是 type="importmap"——它必须放在所有 type="module" 脚本之前,且内容是 JSON 格式映射表;写错位置或格式不合法,整个模块链就静默失败,控制台只报 “Failed to resolve module specifier”,不提示哪行出问题。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










