JavaScript的严格模式("use strict")是一种限制JavaScript语法的方式,目的是为了捕捉一些常见的编码错误,同时阻止或者抛出错误对于一些保险不良行为的使用。它通过在脚本或函数的顶部添加一个特殊的声明来启用,声明如下:
"use strict";
以下是严格模式的一些主要作用:
-
消除JavaScript语法的一些静默错误:
在非严格模式下,这些错误不会抛出异常,可能导致开发者难以发现。启用严格模式后,这些错误会被抛出。 -
修复可能使JavaScript引擎难以优化代码的一些错误:
有些代码模式可能是引擎优化的障碍。严格模式下这些模式会被禁止,有时候能提升代码的性能。 -
禁止使用某些语法:
这些语法在未来的ECMAScript版本中可能会有其他的用途。比如,未来的ECMAScript版本可能会使用implements
,interface
,let
,package
,private
,protected
,public
,static
, 和yield
作为关键词。 -
为未来新版JS做准备:
有些旧语法或行为在严格模式下已被废弃,确保代码兼容未来语言的演变。
以下是“严格模式”相比于“非严格模式”的一些具体区别:
- 在严格模式下,试图给未声明的变量赋值会抛出错误。
- 删除不可删除的属性会抛错(如
delete Object.prototype;
)。 - 要求函数的参数名唯一。
- 禁用
with
语句。 eval
在严格模式下有自己的作用域,且不会引入新的变量。- 禁止
this
关键字指向全局对象。 - 不能使用八进制语法(例如,
042
这样的八进制数字会抛错)。 - 不能给不可写属性赋值,也不能给只读属性赋值(getter-only)。
- 禁止在非构造函数中使用
delete
删除变量(否则会被忽略而不是抛错)。
总的来说,严格模式使得JavaScript语言有了更严谨的错误检查体系,促使开发者编写出更安全、更有利于维护和运行效率的代码。