JavaScript 中的“use strict”有什么作用,其背后的原因是什么?


在本教程中,我们将学习 JavaScript 中“use strict”的作用。

“use strict”是一个指令。它起源于 JavaScript 1.8.5。

use strict 指令规定 JavaScript 代码必须在严格模式下运行。严格模式指令不是语句,而是一个常量表达式。早期的 JavaScript 版本会忽略此表达式。

在严格模式下编写代码时,我们不能使用未声明的变量。除了 IE9 及以下版本,所有现代浏览器都支持此 JavaScript 指令。严格模式允许我们编写更简洁的代码,因为它会在程序中使用未声明的变量时抛出错误。

“use strict”是一个字符串。要启用严格模式,我们需要将此字符串写在脚本的开头。写在开头意味着它具有全局作用域。

使用此 JavaScript 指令的优点是我们可以获得安全的代码。早期的 JavaScript 版本会忽略错误的语法。例如,以前,错误键入的变量名会变成全局变量。在严格模式下,它会为此变量抛出错误,我们可以纠正它。JavaScript 函数在必要时也会使用严格模式。

用户可以按照以下语法使用此方法。

语法

"use strict";
const a = "Strict Variable";

此处,语法中的第一行是指令,a 是遵循严格模式的变量。

示例 1

此程序在普通模式下有一个未声明的变量 q,在严格模式下有一个未声明的变量 p。在非严格模式下,我们可以显示 q 的值。当用户选择严格模式时,我们无法显示 p 的值;相反,它会在 catch 块中抛出错误。

<html> <body> <h2>Using JavaScript strict mode</h2> <p id = "strictModInp"></p> <div id = "strictModOutWrap"> <h3>Click this button to strict mode</h3> <button id = "strictModBtn" onclick = "getStrictMode();">Be Strict </button> </div> <p id = "strictModOut"></p> <script> var strictModEl; var strictModData; var strictModWrap = document.getElementById("strictModOutWrap"); function getStrictMode() { "use strict"; try { p = 10; strictModData = "Undeclared variable in strict mode -
"
+ p; } catch(e) { strictModData = "Undeclared variable in strict mode -
"
+ e; } strictModEl = document.getElementById("strictModOut"); strictModEl.innerHTML = strictModData; // strictModWrap.style.display = "none"; } function noStrict() { q = 10; strictModEl = document.getElementById("strictModInp"); strictModData = "Undeclared variable in normal mode -
"
+ q; strictModEl.innerHTML = strictModData; } noStrict(); </script> </body> </html>

示例 2

此程序有四个严格模式会抛出错误的情况。我们使用 try-catch 块将此错误显示给用户。您可以参考程序下面内联的每个情况注释。

<html> <body> <h2>Using the JavaScript strict mode restriction cases.</h2> <p id = "useStrictInp"></p> <div id = "useStrictOutWrap"> <h5>Click this button to strict mode</h5> <button id = "useStrictBtn" onclick="strictUse();"> Strict </button> </div> <p id = "useStrictOut"> </p> <script> var useStrictEl; var useStrictData; var useStrictWrap = document.getElementById("useStrictOutWrap"); var useStrictOut = document.getElementById("useStrictOut"); var useStrictErr = ""; function strictMode(option) { 'use strict'; try { switch(option) { case 1: //must declare a variable a = 'hi'; break; case 2://must declare an object jsonObj = {name: 'Carla', age: 25}; break; case 3://must not assign to the non-writable property let obj1 = {}; Object.defineProperty(obj1, 'x', { value: 40, writable: false }); obj1.x = 10; break; case 4://must not assign to a getter-only property let obj2 = { get x() { return 10; } }; obj2.x = 5; break; } } catch(e) { useStrictErr += e + "<br><br>"; } useStrictOut.innerHTML = useStrictErr; } function strictUse() { strictMode(1); strictMode(2); strictMode(3); strictMode(4); } </script> </body> </html>

严格模式中的其他限制

我们不能赋值给变量“arguments”

'use strict';
let arguments = 'hello'; //error
let eval = 44;

我们不能使用八进制值

'use strict';
let a = 010; //error

我们不能使用转义字符

'use strict';
let a = \010; //error

我们不能为不可扩展的对象分配新属性

'use strict';
let obj = {};
Object.preventExtensions(obj);
obj.newKey = 'test'; //error

我们不能使用重复的参数

"use strict";
function hello(p1, p1)
{
   console.log('hello')
}; //error
hello();

我们不能删除对象

'use strict';
let person = {name: 'Egan'};
delete person; //error

我们不能使用未声明的变量

"use strict";
var x = 1; //valid
y = 1;//invalid

我们不能使用关键字

"use strict";
var for = 1; //error
var if = 1;

我们不能赋值给只读对象

"use strict";
var arr = [10,20,30];
arr.length = 10;

我们不能使用“with”

"use strict";
with (Math)
{
   x = abs(200.234, 2); //error
};

我们不能使用“eval”

"use strict";
eval("var x = 1");

函数内的严格模式

x = 1; //valid
function sum(val1, val2)
{
   "use strict";
   result = val1 + val2;//error
   return result;
}

我们不能删除原型

"use strict";
delete Object.prototype;

我们不能删除未限定的标识符。

"use strict";
function f(a, b)
{
   delete(a); //error
}

我们不能删除未限定的标识符、函数或对象

"use strict";
var x = 50;
var obj =
{
   'name': 'name'
};
   function f()
{
}
delete x; //error
delete obj; //error
delete f; //error,

要在某些控制台中使用严格模式,请使用此代码块

(function() {
   'use strict';
   //code here...
})()

在本教程中,我们学习了 JavaScript 中的严格模式,它限制了未声明变量的使用。使用严格模式,我们可以确保代码安全和简洁。严格模式很有用,因为它可以防止错误。

更新于:2022年10月31日

188 次浏览

启动您的职业生涯

通过完成课程获得认证

开始
广告