2 分钟讲解 JavaScript 的 `use strict`
JavaScript 在解释方式上非常宽松。例如:
x = 5;
不是有效的 JavaScript 代码,应该写为var x = 5
(或ES6 中的const
/ let
),但 JavaScript 解释器仍然允许这样做并且不会出现任何错误。
简单来说,一般来说,正常的 JavaScript 允许编写糟糕的代码并包含错误的语法。
use strict
解决了这个问题
该指令是在 ES5 中引入的,use strict
它提供了一种方法来告诉解释器将编写错误的 JavaScript 转换为错误。
这迫使开发人员编写更简洁、更有条理、更易读的代码。事实上,use strict
许多著名的 JavaScript 库(例如ReactJS、jQuery等)都使用了 JavaScript。
用线写成"use strict";
下面这行用于use strict
在当前函数范围内启用。
"use strict";
// strict code here
在特定函数中的使用use strict
如下所示:
function myFunc(){
"use strict";
// strict code here
}
一般不会在全局范围内使用,因为严格的代码会阻止全局变量(稍后详细说明)。
相反,通常的做法是use strict
在 JavaScript IIFE(立即调用函数表达式)中使用,如下所示:
// non-strict code here
(function(){
"use strict";
// strict code here
})();
// non-strict code here
该"use strict";
行是一个 JavaScript 文字表达式,不支持它的 JavaScript 版本会忽略它。
use strict
所有主流浏览器都支持(请参阅CanIUse Data)。
请考虑以下示例:
是非严格的代码,并会产生几个潜在的问题:
- 创建一个没有正确声明
var
(或ES6 中的let
/ )的变量const
- 创建全局变量,这可能会导致代码不整洁或难以维护
- 使用
delete
关键字删除变量,而不是让 JavaScript 的垃圾收集器自动执行此操作。
使用use strict
强制代码写得更像这样:
什么可以use strict
阻止
下面简要列出了严格模式的主要特性:
- 强制正确声明变量(例如
x = 1;
) - 防止全局变量
- 阻止重复的对象属性名称(例如
var obj = {p1: 5, p1: 7, p2: 9};
) - 阻止对不可写的全局变量进行赋值(例如
undefined = 1;
) - 防止使用八进制数(例如
var x = 0o144;
)
这不是完整列表,您可以use strict
在使用严格 MDN Web 文档页面中阅读有关确切功能的更多信息。
我希望您喜欢这篇文章并发现use strict
它将来可能会有用。
感谢您的浏览。
——加布里埃尔·罗穆阿尔多,2020 年 1 月 17 日
鏂囩珷鏉ユ簮锛�https://dev.to/gaberomualdo/javascript-use-strict-explained-in-2-minutes-40oo