language属性在中已彻底废弃,现代浏览器完全忽略它;html5规范自2014年起将其标记为“已废弃”,它既不参与脚本执行也不影响mime解析,等同于注释。

language 属性在 <script></script> 中完全不用了,写了不仅无效,还可能干扰模块解析。
为什么 language 已经彻底失效
所有现代浏览器(Chrome、Firefox、Safari、Edge)从 HTML5 起就完全忽略 language 属性;HTML 规范早在 2014 年就将其标记为“已废弃”;它既不参与脚本执行逻辑,也不影响 MIME 类型解析,等同于注释。
常见错误现象:
- 写成
<script language="javascript"></script>,控制台无报错但属性被静默丢弃 - 和
type="module"混用时,部分旧版构建工具(如某些 html-webpack-plugin 模板)会错误拼接出双type,导致模块加载失败
type 属性现在怎么写才安全
绝大多数场景下,type 可以直接省略——浏览器默认按 JavaScript 解析普通脚本;只有三类情况需要显式声明:
- 启用 ESM:必须写
type="module",否则import语法报错 - 嵌入 JSON 数据(非执行):用
type="application/json",避免被误当 JS 执行 - 使用
importmap:需type="importmap"
不要写 type="text/javascript" 或 type="application/javascript"——前者冗余,后者拼错风险高(比如写成 applicaiton),且无兼容性收益。
哪些环境还可能“看到” language 的残留影响
极少数边界情况需要注意:
- JSDOM ≤ v16 的单元测试环境,对缺失
type的<script></script>处理不一致,若测试突然失败,先升级 JSDOM 到 ≥ v17 - 老旧 CMS 或遗留模板引擎(如某些 WordPress 主题)硬编码了
language,需手动清理或覆盖输出逻辑 - 某些静态站点生成器(如旧版 Hugo 模板)可能默认注入该属性,检查
template配置项
真正容易被忽略的点是:很多人以为删掉 language 就够了,却没意识到同时写上 type="text/javascript" 会抵消 type="module" 的效果——一个 <script></script> 标签只认一个 type 值,后写的会覆盖前写的。










