HTML5文档类型使window.event失效,应改用事件参数;script省略type更规范但旧环境需保留;defer/async改变脚本执行时机,需调整DOM操作逻辑;表单原生校验与JS校验需统一策略。

HTML5 文档类型导致 window.event 报错
HTML5 声明()启用严格模式后,IE 系列(尤其 IE8+ 标准模式)不再自动将事件对象挂载到 window.event。老代码里直接写 function handleClick() { var e = window.event || arguments[0]; } 在 HTML5 下会因 window.event 为 undefined 而出错。
实操建议:
立即学习“前端免费学习笔记(深入)”;
- 彻底弃用
window.event,统一使用事件处理器的形参(如function(e) { ... }) - 若需兼容旧 IE 且无法改调用方式,可加一层兜底:在函数开头补
var e = e || window.event;,但必须确保该函数是通过 DOM 事件绑定(如onclick="handleClick()")触发,否则arguments[0]也为空 - 避免在全局作用域或定时器中访问
window.event——它只在事件处理函数执行期间有效
HTML5 中 script 标签的 type 属性变化影响执行
HTML4 习惯写 ,而 HTML5 规定:省略 type 或设为 "module" 以外的值时,默认就是 JavaScript;但部分老旧构建工具或 CMS 会因识别不到 type="text/javascript" 而跳过解析,或在 XHTML 模式下报错。
实操建议:
立即学习“前端免费学习笔记(深入)”;
- 现代项目直接写
即可,无需type属性 - 若页面需被旧版 CMS 解析或嵌入 XML 环境,保留
type="text/javascript"更稳妥 - 使用
type="module"时,注意它隐式开启严格模式、不支持document.write、且默认defer,和传统脚本行为差异大,不能混用全局变量依赖
HTML5 的 defer 和 async 改变脚本执行时机
在 HTML4 中,外部脚本默认阻塞解析;HTML5 引入 defer 和 async 后,脚本加载与执行时机大幅提前,常导致 document.getElementById 找不到元素、或依赖未初始化的全局对象(如 jQuery)报错。
实操建议:
立即学习“前端免费学习笔记(深入)”;
-
defer脚本按顺序执行,但会在 DOM 解析完成后、DOMContentLoaded前运行,适合操作 DOM 的逻辑 -
async脚本下载不阻塞,但执行时机不可控,仅适用于完全独立、无依赖的脚本(如统计埋点) - 若脚本必须操作 DOM 且无法用
defer,改用监听DOMContentLoaded或把移到










