首页 > 语言 > JavaScript > 正文

JavaScript起点(严格模式深度了解)

2024-05-06 14:19:49
字体:
来源:转载
供稿:网友
严格模式(Strict Mode)是ECMAScript5新增的功能。ECMAScript5虽然可以向后兼容ECMAScript3,但如果使用严格模式,哪些ECMAScript5“不在建议使用”的ECMAScript3语法功能将会被全部进制,如果出现就会抛出一行。引入Strict Mode目的是允许开发人员能够选择“更好”的Javascript版本,这个版本能用不同的方式处理那些普遍而又臭名昭著的错误。目前所有的主流浏览器的最新版本——包括IE10与Opera12——都支持严格模式。关于严格模式的大多数信息都可以在《ES5规范》[PDF]的第223页找到。

如何启用严格模式
可以在全局范围内使用严格模式,也可以在一个函数范围内使用严格模式。如果要再全局范围内启用严格模式,只需要在程序的第一行使用代码即可:
代码如下:
'use strict';

在函数的内部启用严格模式,只需要在函数体内第一行使用代码即可:
代码如下:
function imStrict(){
  'use strict';
  // ... 其他代码 ...
}

启用严格模式的语句只是一段普通的字符串“use strict”,没有任何新语法。这意味着不会对就旧式浏览器造成任何负面影响,因此可以大胆使用。

在函数内部启用严格模式的一个实际应用是,把整个Javascript类库定义在严格模式的函数内部,这样就可以不影响外部的代码:
代码如下:
(function(){
  "use strict";
  // Define your library strictly...
})();

严格模式带来了什么?
在开始介绍特殊特性之前,你需要记住,严格模式的目标之一是允许更快地调试错误。帮助开发者调试的最佳途径是当确定的问题发生时抛出相应的错误(throw errors when certain patterns occur),而不是悄无声息地失败或者表现出奇怪的行为(这正是如今不在严格模式下的Javascript做的)。严格模式下的代码抛出更多的错误信 息,这是好事,因为它能帮助开发者很快注意到一些必须立即解决的问题。

去除with语句(Eliminates with)
首先,严格模式去除了with语句。当with语句出现在严格模式中时,它会被认为是非法的Javascript语句并抛出语法错误。所以,使用严格模式的第一步就是确保你没有在使用with。
代码如下:
// 在严格模式中将导致语法错误
with(location){
alert(href);
}

防止意外的全局变量(Prevents accidental globals)
第二点是,变量在赋值之前必须声明。在非严格模式下,给一个未声明的变量赋值将自动生成一个该名字的全局变量。这是Javascript中最普遍的错误之一。严格模式中,这样做将抛出一个错误。
代码如下:
// 严格模式中抛出一个错误
(function(){
someUndeclaredVar ="foo";
}());

取消this值的强制转换(Eliminates this coercion)
另一个重要的变化是,当this值为null或undefined时,不会再将其强制转换为全局对象。也就是说,this保留了它的原始值,也因此可能会导致一些依赖于强制转换的代码发生错误。例如:
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选