严格模式下安全调用getElementById需四步:1.先校验元素存在再操作;2.确保脚本执行晚于DOM构建;3.用const/let显式声明变量;4.避免对style等只读属性批量赋值。

在严格模式下安全调用 getElementById,核心不是“禁用报错”,而是主动规避所有可能触发严格模式限制或运行时错误的场景。getElementById 本身是 DOM API,不直接受严格模式约束;但它的使用常伴随变量未声明、属性误写、执行时机不当等行为——这些恰恰是严格模式重点拦截的点。
以下四点是实际开发中最关键、最易出错的环节,逐一处理即可确保稳定:
检查元素是否存在再操作
严格模式不会阻止 null.innerHTML = ... 报错,但会放大后果(比如未加判断就赋值,直接抛 TypeError)。必须显式校验返回值:
- 总是用
if (el)或el && el.nodeType判断是否获取成功 - 不要跳过检查直接链式调用,例如避免
document.getElementById('x').style.color = 'red' - 推荐写法:
const el = document.getElementById('demo'); if (el) { el.textContent = '更新内容'; }
确保脚本执行时机晚于 DOM 构建
getElementById 返回 null 的主因是脚本在元素尚未解析进 DOM 时就执行了。严格模式虽不干预这点,但会让后续对 null 的操作立刻暴露:
- 把
<script>放在</body>之前(最稳妥) - 或监听
DOMContentLoaded事件,而非load(后者等资源加载完,太晚) - 避免在
<head>中立即执行依赖 DOM 的代码
使用 const/let 声明变量,禁用隐式全局
严格模式禁止给未声明变量赋值。若写成 el = document.getElementById('x'),会直接报 ReferenceError:
- 必须显式声明:
const el = document.getElementById('x')或let el = ... - 不要用
var在函数外声明(易引发提升混淆),优先const - 所有中间变量都需声明,包括临时样式对象、事件处理器等
避免对只读属性批量赋值(尤其 IE 兼容场景)
IE 在严格模式下会把 element.style = "..." 视为向只读属性赋值而报错:
- 绝不写
el.style = "color:red; font-size:14px" - 应拆解为单个属性设置:
el.style.color = 'red'; el.style.fontSize = '14px';
- 如需批量设置,改用
el.setAttribute('style', '...')或 CSS 类名控制
不复杂但容易忽略。

















