JS严格模式,启动!

前言

最近正在熟悉公司代码,发现js文件中都启用了严格模式,这就总结一下开启严格模式后,需要注意的地方!(推荐大家都去使用严格模式,会让代码出现错误的概率低一些,性能也会有所提升!!!)

发车!

一、语法方面

  1. 变量声明

• 严格模式下,必须明确声明变量。如果直接使用未声明的变量,会抛出错误。例如:

javascript 复制代码
     "use strict";// 注意!此处需要加引号!!
     x = 5; // ReferenceError: x is not defined

在非严格模式下,这会自动创建一个全局变量 x,但在严格模式下这是不被允许的。所以应该使用let、const或var来声明变量:

javascript 复制代码
     "use strict";
     let x = 5;
  1. 函数声明

• 严格模式下,不允许在函数体中重复声明函数。例如:

javascript 复制代码
     "use strict";
     function test() {
       function innerFunction() {}
       function innerFunction() {} // SyntaxError: Identifier 'innerFunction' has already been declared
     }

而在非严格模式下,可能会出现一些复杂的行为,如后面的函数声明覆盖前面的函数声明等,严格模式避免了这种混乱。

  1. 保留字

• 严格模式下,一些额外的保留字不能被用作变量名、函数名等。如implements、interface、let(在 ES6 之前,let在严格模式下是保留字)、package、private、protected、public、static等。例如:

javascript 复制代码
     "use strict";
     let implements = 10; // SyntaxError: Unexpected strict mode reserved word
  1. 删除操作

• 严格模式下,不能删除变量和函数声明。例如:

javascript 复制代码
     "use strict";
     var a = 10;
     delete a; // TypeError: Cannot delete property 'a'

而在非严格模式下,delete操作符对变量和函数声明是无效的,但不会抛出错误。

  1. 八进制语法

• 严格模式下,不允许使用以0开头的八进制语法。例如:

javascript 复制代码
     "use strict";
     let num = 010; // SyntaxError: Octal literals are not allowed in strict mode.

这是为了避免混淆,因为这种语法在不同环境下可能有不同的解释。

  1. eval和arguments的限制

• 在严格模式下,eval不会在它的调用上下文中创建变量。例如:

javascript 复制代码
     "use strict";
     eval("var x = 10;");
     console.log(x); // ReferenceError: x is not defined

而在非严格模式下,eval会创建变量。对于arguments对象,严格模式下它不会与命名参数绑定。例如:

javascript 复制代码
     "use strict";
     function test(a) {
       console.log(arguments[0] === a); // false
     }
     test(10);

在非严格模式下,arguments[0] === a会返回true。

二、性能和安全性方面

  1. 性能优化(就单单这个原因,就值得连夜增加严格模式了!(●'◡'●))

• 严格模式有助于提高代码性能。一些 JavaScript 引擎在严格模式下可以进行更高效的优化。例如,由于严格模式下变量和函数声明的规则更加严格,引擎可以更准确地预测变量的作用域和生命周期,从而减少不必要的内存分配和查找操作。

  1. 安全性增强

• 严格模式可以防止一些常见的错误和漏洞。比如避免了意外地创建全局变量,减少了代码被篡改的风险。同时,严格模式下对this的处理也更加严格,避免了错误地将this指向全局对象(在非严格模式下,如果函数不是作为对象的方法调用,this会指向全局对象,而在严格模式下,this会是undefined),这有助于防止一些安全问题,如全局对象被恶意修改。

最后

建议使用严格模式! 等我电脑拿到手 我就要连夜增加严格模式了(˵¯͒〰¯͒˵)

相关推荐
IT_陈寒10 分钟前
Java线程池这破玩意,差点让我周末加班排查到凌晨
前端·人工智能·后端
弈栈录37 分钟前
Java AI 应用的异步化与高并发设计
java·后端·架构
Mr_Mao43 分钟前
告别选型困难!集 VueUse、ahooks、Mantine 于一身:286 个 Hook 的 ReaUse 来了
前端·javascript·react.js
凤山老林1 小时前
Spring Boot 集成 iText 7 实现动态 PDF 生成与电子签章:合同、报表场景实战
spring boot·后端·pdf·itext7·电子签章
孙启超1 小时前
【AI开发之Rust】第 19 课:UniFFI 导出核心能力
开发语言·后端·rust
ServBay2 小时前
基于Jev的浏览器Agent插件狂揽 21k star,3分钟教你解放双手
后端·aigc·ai编程
默_笙2 小时前
🚙 一条腿走路会摔:ES 关键词检索、混合召回与 ReRank 裁判
前端·javascript
Json____2 小时前
家居装修 AI 智能咨询助手:让装修咨询从“大海捞针“变成“一问即答“
java·后端·vue3·it学习·wwwoop.com
dsyyyyy11012 小时前
Vue 3 Watch 监视完全指南
前端·javascript·vue.js
Apifox3 小时前
Apifox 9 月更新|CLI 能力升级、GitLab 私有化部署接入与产品体验优化
前端·后端·测试