JavaScript 严格模式学习笔记
什么是严格模式?
JavaScript 严格模式是 ECMAScript 5 引入的一种不同的 JavaScript 执行模式,它修复了许多 ECMAScript 3 中存在的问题,并对 JavaScript 引擎执行代码时的行为做了一些限制,以避免可能导致错误的行为。
你可以通过在代码文件或函数的开头添加 'use strict';
来启用严格模式。
如下所示:
JavaScriptCopy Code'use strict';
function myFunction() {
// 函数体
}
严格模式的特点
- 禁止使用未声明的变量。
- 禁止删除变量或函数。
- 对象字面量属性名不能重复。
- 函数的参数名不能重复。
eval
和arguments
不能被重新赋值。with
语句不能使用。- 变量名不能与关键字重名。
this
指向变得更加明确。
示例
下面是一些具体的实例来演示严格模式的一些特点。
查找未声明的变量
在严格模式下,如果我们使用未声明的变量,会抛出一个引用错误。
如下所示:
JavaScriptCopy Code'use strict';
x = 3.14;
上述代码将会抛出以下错误:
Copy CodeUncaught ReferenceError: x is not defined
禁止删除变量或函数
在严格模式下,如果我们试图删除一个变量或函数,会抛出一个类型错误。
如下所示:
JavaScriptCopy Code'use strict';
var x = 1;
delete x;
上述代码将会抛出以下错误:
Copy CodeUncaught TypeError: Cannot delete property 'x' of #<Window>
对象字面量属性名不能重复
在严格模式下,如果我们定义一个对象字面量,并在其中定义了重复的属性名,会抛出一个语法错误。
如下所示:
JavaScriptCopy Code'use strict';
var person = {name: "John", name: "Doe"};
上述代码将会抛出以下错误:
Copy CodeUncaught SyntaxError: Duplicate data property in object literal not allowed in strict mode
函数的参数名不能重复
在严格模式下,如果我们在同一个函数中定义了重复的参数名,会抛出一个语法错误。
如下所示:
JavaScriptCopy Code'use strict';
function myFunction(x, x) {
// 函数体
}
上述代码将会抛出以下错误:
Copy CodeUncaught SyntaxError: Duplicate parameter name not allowed in this context
eval
和 arguments
不能被重新赋值
在严格模式下,我们不能对 eval
或 arguments
赋值。
如下所示:
JavaScriptCopy Code'use strict';
eval = 3.14;
上述代码将会抛出以下错误:
Copy CodeUncaught TypeError: Assignment to eval or arguments is not allowed in strict mode
with
语句不能使用
在严格模式下,我们不能使用 with
语句。
如下所示:
JavaScriptCopy Code'use strict';
with (Math) {
x = cos(2);
}
上述代码将会抛出以下错误:
Copy CodeUncaught SyntaxError: Strict mode code may not include a with statement
变量名不能与关键字重名
在严格模式下,我们不能使用一些 JavaScript 关键字作为变量名。例如,let
、class
、const
等。
如下所示:
JavaScriptCopy Code'use strict';
var let = "Hello";
上述代码将会抛出以下错误:
Copy CodeUncaught SyntaxError: Unexpected token 'let'. Expected an identifier name.
this
指向变得更加明确
在严格模式下,函数内部的 this
值不再是全局对象,而是保持 undefined 或者绑定到一个值。
JavaScriptCopy Code'use strict';
function myFunction() {
console.log(this);
}
myFunction(); // 输出:undefined
总结
JavaScript 严格模式对于保证代码的安全性和可读性有很大的帮助,建议在写代码时启用严格模式。