JavaScript严格模式

Strict mode是JavaScript1.8.5引进的技术,但还没有浏览器确实可靠的实现了严格模式,所以使用时要小心并且多测试

Strict mode可以应用于整个脚本,也可以适合于单个函数。

激活strict mode

整个脚本

在其它所有语句前,放置”use strict”;

单个函数

把”use strict;放置在函数体的最前面。

严格模式中的变化

把mistake变成error

简单来说就是把以前JavaScript可以接受的语法问题变成可以抛出来的error。

1.      变量前不加var会抛异常(normal mode, 没有var就是global变量)。

2.      给NaN赋值会抛异常。

3.      给不可写的或只读的属性赋值,或给不可扩展的对象添加新属性,会抛异常。

4.      试图删除不能删除的属性会抛语法异常。

5.      重复的属性定义也会抛语法异常(normal mode, 后面的覆盖前面的)。

6.      方法的参数名重复也会抛语法异常(normal mode, 后面的覆盖前面的)。

7.      禁止使用八进制的语法(normal mode允许)。

简化变量的使用

1.      禁止使用with语句(normal mode允许)。

2.      Eval方法不能引入新的变量(normal mode允许)。

3.      禁止在eval()中删除变量。

使eval和arguments更简单

1.      不能给eval和arguments这样的名字做绑定或赋值,以下所有的企图都会导致语法错误:

"use strict";

eval = 17;

arguments++;

++eval;

varobj = { set p(arguments) { } };

vareval;

try{ } catch(arguments) { }

functionx(eval) { }

functionarguments() { }

vary = functioneval() { };

varf = newFunction("arguments", "'use strict'; return 17;");

2.      Arguments只保存函数被调用时的初始值。给arguments[i]赋值不会再修改相应的函数参数。而在normalmode下,修改相应第一个参数,同时也会修改arguments[0],而修改arguments[0]也同时修改第一个参数。

3.      不再支持arguments.callee。

使JavaScript更牢固

1.      This不再被封装,在normal mode下,this一直是对象。

2.      Fun.caller和fun.arguments即不是可以删除的属性,也不能被set或retrieved。

3.      Arguments.caller也是不可以删除的属性,也不能set或retrieved。

为将来的ECMAScript版本铺平道路

1.      增加了下列保留字:implements, interface, let,package, private, protected, public, static和yield 。

2.      方法声明应该放在脚本或方法的最前面,不能放在if或for等语句中间。

你可能感兴趣的:(JavaScript,JavaScript,JavaScript,JavaScript,mode,strict)