在ECMAscript5严格模式介绍(严格的模式)
严格的模式是ECMAscript 5的新功能,它允许你把整个程序,或是一个函数,在严格的操作环境下,严格防止某些操作,抛出更多的例外。虽然ECMAscript 5向下兼容ECMAscript 3,严格的模式,所有的功能,在不使用ECMAscript 3被禁用(或抛错了)而不是兼容。
在实现严格的模型时,有以下好处:
1。捕获一些编程错误并抛出异常。
2。防止某些相对不安全的操作(例如访问全局变量)并抛出异常。
三.禁用一些令人困惑的特性。
大多数关于严格的模式可以对ES5规范{ pdf第二百二十三页找到的信息}。
(注:ECMAscript 5严格的模式不同于Firefox的严格的模型)
如何启用严格模式
在程序开始时添加此语句可以使整个脚本的模式更加严格:
复制代码代码如下所示:
严格使用;
严格模式也只能在函数中启用,而不影响外部:
复制代码代码如下所示:
功能imstrict(){
严格使用;
您的代码…
}
严格的模式启用语句只是一个普通字符串,使用严格,没有任何新语法,这意味着它对旧浏览器没有任何负面影响。
函数中严格模式的实际应用是在严格的模式函数中定义整个Javascript类库,以便不影响外部代码。
复制代码代码如下所示:
非严格的代码…
(函数(){())
使用严格;
您的库严格定义…
});
非严格的代码…
那么,在严格模式下脚本的变化是什么
变量和属性
未定义变量的赋值将失败,而不是把这个变量作为全局变量。
编写一个可以被写为false的属性,删除一个可以配置为false的属性,或者添加一个可扩展为false的属性,这将导致错误。
对变量、函数或函数参数执行删除操作会导致错误。
复制代码代码如下所示:
变量foo =测试;
函数测试(){ }
删除富;错误
删除测试
功能测试2(arg){
删除处理程序;错误
}
在对象容器中定义相同的属性会导致抛出一个异常:
复制代码代码如下所示:
错误
{真的
eval
任何使用eval函数名称(主要目的是指一个eval函数的变量或对象的属性)是被禁止的。
复制代码代码如下所示:
生成错误…
obj.eval =…
obj.foo = eval;
VaR方法调用…;
对于(VAR EVAL…){ }
功能(EVAL){ }
功能测试(EVAL){ }
功能(EVAL){ }
新功能(eval)
此外,新的变量的声明无效通过eval声明:
复制代码代码如下所示:
eval(var a = false;);
打印(种类); / /未定义
功能
重写参数对象可能会导致错误:
复制代码代码如下所示:
参数=…};不允许
相同的名称参数会导致错误:
复制代码代码如下所示:
(函数)
对arguments.caller和arguments.callee访问将被抛出的异常。因此,任何需要使用匿名函数必须先命名,例如:
复制代码代码如下所示:
setTimeout(后来的功能(){)
做某事…
setTimeout(后1000);
},1000);
争论,来电,以及函数调用者属性不再存在,并定义它们的操作也被禁止。
复制代码代码如下所示:
函数测试(){ }
test.caller = 'caller '; / /错误
最后,一个长期的(非常讨厌)的bug已经解决:当使用无效或未定义为function.prototype.call或function.prototype.apply方法的第一个参数,这里面的功能将指向全局对象,严格的模式将无法执行,并抛出异常:
复制代码代码如下所示:
(函数({)})。调用(NULL)
用(){ }
带(){语句在严格模式下完全丢失。