📜  JavaScript 中的严格模式(1)

📅  最后修改于: 2023-12-03 15:31:40.462000             🧑  作者: Mango

JavaScript 中的严格模式

在 JavaScript 中,严格模式(strict mode)是一种特殊的模式,可以提供更加严格的语法和错误检查,避免一些常见的编程错误。在使用严格模式时,代码不能使用一些不安全的语法和特性,例如隐式全局变量和禁止删除变量等。

开启严格模式

可以通过在 JavaScript 代码文件或函数的开头添加 'use strict'; 来开启严格模式。例如:

'use strict';

// 在此处编写严格模式的 JavaScript 代码

如果需要全局开启严格模式,可以将 'use strict'; 添加在 JavaScript 文件的开头。

示例
function test(){
  'use strict';

  // 在此处编写严格模式的 JavaScript 代码
}
'use strict';

// 在此处编写严格模式的 JavaScript 代码
严格模式的特性
1.禁止使用未声明的变量

在严格模式下,在使用变量之前必须先声明变量,否则会抛出 ReferenceError 错误。

'use strict';

x = 1; // 抛出 ReferenceError: x is not defined
2.禁止删除变量

在严格模式下,不能删除一个已经声明的变量,否则会抛出 SyntaxError 错误。

'use strict';

var x = 1;
delete x; // 抛出 SyntaxError: Delete of an unqualified identifier in strict mode.
3.禁止使用保留字作为变量名或函数名

在严格模式下,不能使用一些 ECMAScript 保留字(如 enumimplementsprivate)作为变量名或函数名,否则会抛出 SyntaxError 错误。

'use strict';

var enum = 1; // 抛出 SyntaxError: Unexpected token enum
4.函数必须有名字

在严格模式下,所有函数必须有名字。匿名函数将抛出 TypeError 错误。

'use strict';

var func = function(){ }; // 抛出 TypeError: In strict mode code, functions can only be declared at top level or inside a block.
5.禁止重复的参数名

在严格模式下,函数的参数名不能重复。

'use strict';

function test(a, b, a){ } // 抛出 SyntaxError: Duplicate parameter name not allowed in this context
6.禁止 evalwith

在严格模式下,不能使用 evalwith 语句。

'use strict';

eval('var x = 1'); // 抛出 SyntaxError: Eval code may not include 'var' or 'let' declarations.
'use strict';

var x = 1;
with(x){ } // 抛出 SyntaxError: Strict mode code may not include a with statement.
7.保留 this 的值

在严格模式下,函数内部的 this 值不再由调用方式决定(如在全局作用域中调用时为全局对象,在对象属性中调用时为该对象),而是保留为 undefined

'use strict';

function test(){
  console.log(this); // 输出 undefined
}
test();
8.强制使用 callapply 调用函数

在严格模式下,使用 call()apply() 调用函数时,第一个参数必须是函数调用时的 this 值。否则将抛出 TypeError 错误。

'use strict';

function test(){
  console.log(this);
}
test.call(); // 抛出 TypeError: Cannot read property 'documentElement' of undefined

以上是严格模式的主要特性,此外还有一些其他的限制和改动。在编写 JavaScript 代码时,建议开启严格模式以提高代码质量和可维护性。