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 = "nhooo.com";// SyntaxError测试看看‹/›
字符串“arguments”不能用作标识符(变量名):
"use strict"; var arguments = "nhooo.com";// SyntaxError测试看看‹/›
将来的ECMAScript版本可能会引入新的语法,ES5中的严格模式会应用一些限制以简化过渡。
如果在严格模式中禁止这些更改的基础,则更容易进行一些更改。
在严格模式下,以下标识符列表成为保留关键字:
implements
interface
let
package
private
protected
public
static
yield
"use strict"; var package = true; // This will cause an error测试看看‹/›