"use strict";定义JavaScript代码应该“严格模式”执行。
在"use strict"指令
在"use strict"指令是在JavaScript中1.8.5新(ECMAScript version 5) 。
它不是一个声明,但文字的表达,由以前版本的JavaScript忽略。
的目的"use strict"是表明该代码应本着“严谨模式”下执行。
凭借严格的模式,你不能,例如,使用未声明的变量。
严格模式中支持:
IE从版本的Firefox 10。4版本。
Chrome从13版Safari从5.1版本。
Opera从12版。
声明严格模式
严格模式是通过将宣布"use strict";一个脚本或函数的开始。
在脚本的开头声明的,它具有全局范围(在脚本将严格模式下执行的所有代码):
例
"use strict";
myFunction();
function myFunction() {
y = 3.14;
// This will also cause an error (y is not defined)
}
试一试» 一个函数中声明,它具有局部范围(仅里面的代码的功能是在严格模式下):
x = 3.14; // This will not cause an error.
myFunction();
function
myFunction() {
"use strict";
y = 3.14;
// This will cause an error (y is not defined)
}
试一试» 在"use strict";语法
语法,宣告严格模式,被设计为与旧版本的JavaScript兼容。
编译数字文字(4 + 5)或字符串文字("John Doe";)在JavaScript程序有没有副作用。 它只是编译成一个不存在的变量和死亡。
因此, "use strict" ; 只关系到新的编译器“理解”的意思吧。
为什么要严格模式?
严格模式可以更容易地编写“安全”的JavaScript。
严格模式改变此前接受“语法错误”变成真正的错误。
作为一个例子,在一般的JavaScript,错误输入变量名称创建一个新的全局变量。 在严格模式下,这将抛出一个错误,因此无法意外创建一个全局变量。
在正常的JavaScript,开发人员将不会收到任何错误反馈给非可写的属性赋值。
在严格模式下,任何分配到不可写的属性,一个只吸气属性,一个不存在的属性,一个不存在的变量,或者一个不存在的对象,将抛出一个错误。
在严格模式不允许
使用一个变量,未声明的,是不允许的:
"use strict";
x = 3.14; // This
will cause an error (x is not defined)
对象是变量太多。
使用一个对象,未声明的,是不允许的:
"use strict";
x =
{p1:10, p2:20}; // This
will cause an error (x is not defined)
删除一个变量(或对象)是不允许的。
"use strict";
var x = 3.14;
delete x; // This
will cause an error
删除功能是不允许的。
"use strict";
function x(p1, p2) {};
delete x;
// This will cause an error
复制参数名称是不允许的:
"use strict";
function x(p1, p1) {}; // This will cause an error
八进制数字文字不准:
"use strict";
var x = 010; // This
will cause an error
转义字符不允许:
"use strict";
var x = \010; // This will cause an error
写入只读属性是不允许的:
"use strict";
var obj = {};
Object.defineProperty(obj, "x", {value:0, writable:false});
obj.x = 3.14; // This
will cause an error
写入只能获得属性是不允许的:
"use strict";
var obj = {get x()
{return 0} };
obj.x = 3.14; // This
will cause an error
删除不可删除的属性是不允许的:
"use strict";
delete Object.prototype; // This will cause an error
字符串“的eval”不能用作变量:
"use strict";
var eval = 3.14; // This will cause an error
字符串“参数”不能用作变量:
"use strict";
var arguments = 3.14; // This will cause an error
with语句是不允许的:
"use strict";
with (Math){x = cos(2)}; // This will cause an error
出于安全原因, eval()是不允许创建从它被称为变量的作用域:
"use strict";
eval ("var x = 2");
alert (x); // This
will cause an error
在函数调用像f() ,在这个值是全局对象。 在严格模式下,现在不确定。
面向未来!
未来保留关键字不是在严格模式允许的。 这些是:
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
"use strict";
var public = 1500; // This will cause an error
小心!
小心!
在"use strict"指令只在一个脚本或函数的开始认可。