JavaScript中的 "use strict "指令有什么作用?

998 阅读5分钟

JavaScript发展了很长时间,没有兼容性问题,并通过增加新的功能而不改变旧的功能进行修改。它有它的优点和缺点,优点是它不允许破坏现有的代码,然而缺点是开发者或创造者的任何错误都会永远停留在JavaScript中。

这种情况一直持续到2009年ECMAScript 5(也被称为ES5)被引入,其好处是在修改现有功能的同时增加了新的功能。然而,在JavaScript中,这些修改默认是关闭的。人们需要用一个特殊的信息或命令来启用它,这就是 "use strict"。

什么是 "使用严格"?

use strict "的基本定义是,它可以使JavaScript在严格模式下运行代码。严格模式是指不能使用未声明的变量。严格模式还可以帮助我们避免可能出现的bug/错误,如果我们没有正确地遵循JavaScript的语法。当我们打错字,导致出现不需要的新变量时,它也会帮助我们。我们也可以说,严格模式的基本目的是使我们的代码看起来更干净。

普遍支持吗?

应该记住,浏览器并不普遍支持使用严格模式。大多数现代浏览器都支持 "严格使用",但Internet Explorer 9和9以下的版本除外。以下版本的浏览器支持 "严格使用",或指定的版本。

火狐浏览器Internet Edge谷歌浏览器歌剧院Safari
4.010.013.012.16.0

严格模式的语法

我们可以通过在函数或代码的顶部准确地添加关键字 "use strict "来实现或声明使用严格模式。如果我们在代码的顶部声明它,它将有一个全局范围,这意味着我们所有的JavaScript代码将以严格模式执行。

让我们看两个例子。在第一个例子中,我们将使用一个未声明的变量,而不使用 "use strict"。在第二个例子中,我们将以同样的方式使用严格模式。

例1:

name="Linux Hint";
console.log(name);

输出:Linux提示

例2:

"use strict";

name="Linux Hint";

//this will cause an error that name is not defined

在上述情况下,会出现 "name is not defined"的错误。

让我们看一下另一个例子,在函数中使用了严格模式。"use strict "的范围将是功能性的,即只限于函数内。

例3:

function myFunc(){

    "use strict";

    y=4;

    //this will cause an error

    //error will be that y is not defined

}

myFunc();

在这个例子中,第一个变量 "name "将不会出现错误,因为我们没有使用严格模式。然而,在函数中,我们将看到 "y "没有被声明的错误,因为我们使用的是 "use strict "模式。让我再次强调,在这个例子中,严格模式的范围只限于 "myFunc() "函数。

为什么使用严格模式?

现在我们已经看了严格模式的语法和一些例子,让我们来探讨一下为什么要使用严格模式的问题?

使用严格模式的好处是,如前所述,它使我们的代码更加简洁。另外,严格模式还可以帮助我们编写安全的JavaScript。通常我们会忽略不好的语法。这可能会给我们以后带来麻烦。严格模式可以帮助我们将非正式的/糟糕的语法代码转化为真正的错误,这样我们就可以相应地处理它们。

在例子1中,我们看到我们没有声明一个变量,但JavaScript控制台并没有抛出任何错误。它把变量 "name "当作一个全局变量。在严格模式下,我们可以避免这种情况,因为严格模式会抛出一个错误,即name未被定义。这有助于我们避免在代码中意外地声明全局变量。

严格模式下的限制

让我们来讨论一下在严格模式下什么是不允许的或不允许的。从例子1中我们可以看到,如果一个变量没有被定义或声明,我们就不能在严格模式下使用它。对象的情况也是如此。我们必须在严格模式下声明对象,否则我们会得到一个错误。

例4:

"use strict";
language={
   first:"English",
   second: "Chinese"
};
//this will throw us an error as object "language" is not defined

严格模式也不允许我们删除一个变量或一个函数。

例5:

"use strict";
const pi=3.143;
delete pi;
//this will cause an error

function myFunc(){
   //Hello World
}
delete myFunc;
//this will cause an error

除此以外,严格模式还限制我们使用在未来的JavaScript版本中保留的关键字或目前正在使用的关键字。例如,我们不能使用 implements, let, package, interface, yield, static, protected, public, private, arguments等等。

严格模式下的关键词 "this"

关键词 "this "在JavaScript中被用来指代它所属的对象。在严格模式下,"this "关键词的行为是不同的。假设你在使用 "this "的同时使用了一个未声明的对象。在严格模式下,JavaScript将返回 "undefined",而不是对象。

例6:

"use strict";

function myFunc(){
   alert(this);
   //this will show us an alert of undefined
}
//calling the function now
myFunc();

结论

keyword use strict可以帮助JavaScript开发者在严格模式下运行他们的JavaScript代码,从而限制未声明的变量的使用,并帮助开发者避免可能的错误或bug。

我们在这篇文章中研究了 "use strict "指令,讨论了如何以及为什么要使用 "use strict "指令,并讨论了支持严格模式的浏览器。我们通过例子掌握了这些概念。通过学习这篇文章,我们知道了如何使我们的代码更简洁,如何通过使用 "use strict "来避免不必要的全局变量。 让我再次强调一个事实,如果你使用 "use strict",一定要在代码块的顶部或函数的顶部声明,这样才能发挥作用。