JavaScript菜鸟教程

JavaScript 对象

JavaScript 函数

JS HTML DOM

JS 浏览器BOM

AJAX 菜鸟教程

JavaScript 参考手册

JavaScript 严格模式(use strict)

ECMAScript 5中引入的JavaScript严格模式是选择加入 JavaScript受限变体的一种方式。

严格模式不仅仅是一个子集:它有意地具有与普通代码不同的语义。

严格模式使编写“安全” JavaScript更加容易。

严格模式将以前接受的“错误语法”更改为实际错误。

在严格模式下,例如,您不能使用未声明的变量。

调用严格模式

严格模式是通过"use strict";在脚本或函数的开头添加来声明的。

要为整个脚本调用严格模式,在任何其他任何声明之前,输入语句“use strict” ::

"use strict";
str = "嗨,我是严格模式脚本!";  // 导致错误,因为未声明str
测试看看‹/›

要为函数调用严格模式,请将确切的语句"use strict";放在函数的主体中,然后放在其他任何语句之前:

function myFunc() {
  // 函数级严格模式语法
  "use strict";
  str = "大家好,我是严格模式函数!";  // 这将导致一个错误
  return str;
}
测试看看‹/›

严格模式可以帮助您编写更简洁的代码,例如防止使用未声明的变量。

该"use strict"指令只能在脚本或函数的开头识别。

单引号和双引号语法都是可以接受的('use strict';或"use strict";)。

严格模式下的常见限制

如您所知,在严格模式下,必须声明所有变量。

如果将值分配给不是声明变量的标识符,则将引发ReferenceError:

"use strict";
x = 5; // ReferenceError: x 没有定义
测试看看‹/›

不允许使用未声明的对象(对象也是变量):

"use strict";
coord = {x:10, y:20};   // ReferenceError: coord 没有定义
测试看看‹/›

在严格模式下,如果尝试删除变量,则会抛出语法错误:

"use strict";
var msg = "Hello World";
delete msg;// SyntaxError
测试看看‹/›

同样,当您尝试在严格模式下删除函数时,会出现语法错误:

"use strict";

function sum(a, b) {
return a + b;
}

delete sum;// SyntaxError
测试看看‹/›

在严格模式下,不允许重复参数名称:

"use strict";

function square(a, a) {  // SyntaxError
return a * a;
}
测试看看‹/›

在严格模式下,不允许写入只读属性:

"use strict";
var person = {name: "Akash", age: 22};
Object.defineProperty(person, "gender", {value: "male", writable: false});

person.gender = "female";   // TypeError
测试看看‹/›

在严格模式下,不允许使用with语句:

"use strict";
with (Math){x = sqrt(25)};   // SyntaxError
测试看看‹/›

在严格模式下,不允许使用八进制数字:

"use strict";
var x = 010;   // SyntaxError
测试看看‹/›

出于安全原因,eval()不允许在调用它的范围内创建变量:

"use strict";

eval("var x = 10;");
console.log(x);   // ReferenceError: x 变量没有定义
测试看看‹/›

字符串“eval”不能用作标识符(变量名):

"use strict";
var eval = "(cainiaoplus.com)";// SyntaxError
测试看看‹/›

字符串“arguments”不能用作标识符(变量名):

"use strict";
var arguments = "(cainiaoplus.com)";// SyntaxError
测试看看‹/›

为将来的ECMAScript版本铺平道路

将来的ECMAScript版本可能会引入新的语法,ES5中的严格模式会应用一些限制以简化过渡。

如果在严格模式中禁止这些更改的基础,则更容易进行一些更改。

在严格模式下,以下标识符列表成为保留关键字:

  • implements

  • interface

  • let

  • package

  • private

  • protected

  • public

  • static

  • yield

"use strict";
var package = true;  // This will cause an error
测试看看‹/›