什么是javascript严格模式_它如何帮助你写出更安全的代码
发布时间 - 2026-01-11 00:00:00 点击率:次严格模式是一组更严格的解析和执行规则,启用后使危险代码直接报错以暴露潜在问题;需用"use strict"字面量在脚本顶部或函数首行声明,禁用静默失败、with语句、重复参数等,并使非函数上下文中this为undefined。
JavaScript 严格模式不是语法糖,也不是新语言,而是一组更严格的解析和执行规则——启用后,原本“能跑但危险”的代码会直接报错,逼你暴露并修复潜在问题。
如何启用严格模式
严格模式必须通过字面量字符串 "use strict" 声明,且必须出现在脚本顶部或函数体第一行(否则无效)。
"use strict";
function foo() {
"use strict"; // 函数级严格模式
// ...
}
- 全局启用:整个脚本文件第一行是
"use strict",所有代码受约束 - 函数级启用:只对当前函数及其嵌套作用域生效,不影响外部
- 不能用条件语句包裹:
if (true) { "use strict"; }完全无效 - 模块(
.m或
jsimport加载的脚本)默认启用严格模式,无需手动声明
严格模式禁止的常见危险操作
它不新增功能,而是封掉容易引发 bug 的旧习,比如静默失败、意外全局变量、模糊的 this 绑定。
- 给未声明变量赋值会报
ReferenceError(而不是自动挂到window上) -
with语句被完全禁用——它破坏作用域链,让静态分析失效 - 函数参数名重复(如
function f(a, a) {})触发SyntaxError - 八进制字面量(如
010)被禁止,避免歧义;必须写成0o10 -
delete不能用于变量、函数、参数,只能删对象自有属性(否则报TypeError) - 在非函数上下文中,
this不再指向全局对象,而是undefined(防止意外修改全局)
严格模式下 this 行为的变化
这是最容易踩坑的一点:非严格模式中,独立调用函数时 this 指向全局对象(window 或 globalThis),而严格模式下是 undefined。
"use strict";
function foo() {
console.log(this); // undefined
}
foo(); // 而不是 window
- 箭头函数不受影响(它本就不绑定
this) - 类方法、对象方法、
call/apply/bind显式传入的this仍正常工作 - 这个变化让
this绑定更可预测,也更容易发现忘记绑定的事件处理器或回调
严格模式不是万能的,但它能暴露真问题
它不会阻止逻辑错误,也不会帮你防 XSS 或类型错误,但它强制你面对 JavaScript 中那些“靠运气运行”的灰色地带。比如,你写 delete obj.x 却没检查 obj 是否存在,在非严格模式下可能静默失败;而在严格模式下,如果 obj 是 undefined,会立刻抛出 TypeError,让你知道该加空值检查了。
真正容易被忽略的是:严格模式只对**当前作用域**有效,且无法“继承”——子函数不会自动严格,除非自己也写了 "use strict"。混用严格与非严格代码时,边界处的行为差异尤其需要留心。
# javascript
# java
# js
# 处理器
# app
# win
# 作用域
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环
Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】
网站建设保证美观性,需要考虑的几点问题!
详解Oracle修改字段类型方法总结
图册素材网站设计制作软件,图册的导出方式有几种?
php485函数参数是什么意思_php485各参数详细说明【介绍】
百度浏览器网页无法复制文字怎么办 百度浏览器复制修复
Internet Explorer官网直接进入 IE浏览器在线体验版网址
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
Laravel怎么实现API接口鉴权_Laravel Sanctum令牌生成与请求验证【教程】
Windows10如何删除恢复分区_Win10 Diskpart命令强制删除分区
如何快速搭建高效香港服务器网站?
昵图网官方站入口 昵图网素材图库官网入口
如何获取PHP WAP自助建站系统源码?
JS实现鼠标移上去显示图片或微信二维码
Laravel如何连接多个数据库_Laravel多数据库连接配置与切换教程
EditPlus 正则表达式 实战(3)
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
详解MySQL数据库的安装与密码配置
Swift中switch语句区间和元组模式匹配
JavaScript如何实现类型判断_typeof和instanceof有什么区别
如何快速上传自定义模板至建站之星?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
JavaScript如何操作视频_媒体API怎么控制播放
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
浅谈redis在项目中的应用
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
千库网官网入口推荐 千库网设计创意平台入口
重庆市网站制作公司,重庆招聘网站哪个好?
Laravel怎么在Blade中安全地输出原始HTML内容
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Laravel如何创建和注册中间件_Laravel中间件编写与应用流程
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
html5源代码发行怎么设置权限_访问权限控制方法与实践【指南】
如何在腾讯云免费申请建站?
Laravel如何安装Breeze扩展包_Laravel用户注册登录功能快速实现【流程】
Laravel如何生成API文档?(Swagger/OpenAPI教程)
大学网站设计制作软件有哪些,如何将网站制作成自己app?
手机软键盘弹出时影响布局的解决方法
Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践
Laravel怎么使用Session存储数据_Laravel会话管理与自定义驱动配置【详解】
微信小程序 配置文件详细介绍
油猴 教程,油猴搜脚本为什么会网页无法显示?
如何快速选择适合个人网站的云服务器配置?
如何有效防御Web建站篡改攻击?
韩国服务器如何优化跨境访问实现高效连接?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程


js