最新的Web开发教程
 

JavaScript使用严格


"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";
x = 3.14;       // This will cause an error (x is not defined)
试一试»

"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"指令只在一个脚本或函数的开始认可。