严格模式(Strict Mode)是一种运行模式,它提供了一种更加严格的语法和错误检查,以帮助开发者编写更可靠、更规范的代码。
-
什么是严格模式:
严格模式是一种 JavaScript 的执行模式,通过启用严格模式,可以对一些不规范或潜在的问题进行检测,并禁用一些不安全的语言特性,以提高代码质量和可维护性。 -
开启严格模式:
在脚本文件或函数的开头添加"use strict";
字符串,即可开启严格模式。例如:"use strict"; // 严格模式下的代码
-
严格模式和普通模式的区别:
- 变量必须声明:在严格模式下,变量必须使用
var
、let
或const
进行声明,否则会抛出错误。而在普通模式下,未声明的变量会被隐式创建为全局变量。 - 删除变量和不可写(不允许删除的 / 不存在的)属性:在严格模式下,无法删除不可写的变量(使用
delete
操作符),会抛出错误。而在普通模式下,删除不可写属性的操作会静默失败(不会给出任何提示)。 - 禁止重复的函数参数名:在严格模式下,函数声明中禁止使用重复的参数名,否则会抛出错误。而在普通模式下,重复的参数名会被忽略。
- 对象不能有重名属性(ES6 已不存在此问题)。
- 禁止使用八进制字面量:在严格模式下,八进制字面量(以0开头的数字)将被视为语法错误。而在普通模式下,八进制字面量会被解析为对应的十进制数。
- 函数内部
this
值为undefined
:在严格模式下,函数内部的this
值为undefined
,而不是默认指向全局对象(如浏览器中的window
)。 - 创设 eval 作用域。严格模式下创设了 eval 作用域。正常模式下, eval 语句的作用域取决于它处再哪个作用域。严格模式下,eval 本身就是一个作用域,不能再生成全局作用域了,所生成的变量只能用于 eval 内部。
"use strict";var x = 2 // eval函数用于将给定的字符串作为JavaScript代码执行 console.info(eval('var x = 5; x')) console.info(x) // 严格模式下,eval中的变量不会影响外部变量,所以为2;否则为5
- 保留字。严格模式新增的一些保留字:interface、let、package、private、static等,用于变量名将会报错。
- 变量必须声明:在严格模式下,变量必须使用
使用严格模式的优点:
- 消除JavaScript语法的一些不合理、不严谨之处,减少一些怪异行为
- 消除代码运行的一些不安全之处,保证代码运行的安全
- 提高编译器效率,增加运行速度
- 为未来新版本的Javascript做好铺垫