是时候使用JavaScript严谨模式(Strict Mode)提升团队开发效率


随着WebApp突飞猛进的发展,Javascript写的WebApp规模越来月庞大,比如典型的代表产品腾讯WebQQ、HTML5游戏等等,Javascript越来越需要大量的开发人员多多人协作开发。同...
       随着WebApp突飞猛进的发展,Javascript写的WebApp规模越来月庞大,比如典型的代表产品腾讯WebQQ、HTML5游戏等等,Javascript越来越需要大量的开发人员多多人协作开发。同时HTML5、CSS3等新技术和NodeJs项目的高速发展,这几年JavaScript语言借着各种新API陆续被运用到从移动设备到服务器的多个”新领域”中。
       但JavaScript语言自身由于ECMAScript第四版被放弃而一直没有多少改进。和借HTML5之名过度宣传的各种新API相比,语法层面通过严格模式(Strict Mode)进行的改进几乎可以用不为人知来形容。学习了解严格模式之后,就算不马上进行实践,也会让我们对JavaScript中坏气味的一方面有更清晰的认识,从而帮助我们写出更好的代码。
下面的内容翻译自It’s time to start using JavaScript strict mode,作者Nicholas C.Zakas参与了YUI框架的开发,并撰写了多本前端技术书籍,在我看过关于JavaScript严格模式的入门介绍文章中,这篇是写得最好的。
       ECMAScript5中引入的严格模式,通过让JavaScript运行环境对一些开发过程中最常见和不易发现的错误做出和当前不同的处理,来让开发者拥有一个”更好”的JavaScript语言。很长一段时间内,由于只有Firefox支持严格模式,我曾对严格模式表示怀疑。但到了今天,所有主流的浏览器都在他们的最新版本中支持了严格模式(包括IE10,Opera12和Android4,IOS5)是时候开始使用严格模式了。
       严格模式能起到什么作用?
       严格模式为JavaScript引入了很多变化,我把他们分为两类(明显的和细微的)。细微改进的目标是修复当前JavaScript中的一些细节问题,对于这些问题我不在这里进行深入介绍;如果你有兴趣,请阅读Dmitry Soshnikov撰写的精彩文档ECMA-262-5 in Detail Chapter 2 Strict Mode。 我在这里主要介绍严格模式引入的明显变化,那些在你使用严格模式前应该知道的概念和那些对你帮助最大的改变。
       在开始学习具体特性前,请记住严格模式的一大目标是让你能更快更方便的调试。运行环境在发现问题时显性的抛出错误比默不做声的失败或怪异行事(未开启严格模式的JavaScript运行环境经常这样)要好。严格模式会抛出更多错误,但这是好事,因为这些错误会唤起你注意并修复很多以前很难被发现的潜在问题。
       去除WITH关键词
       首先,严格模式中去除了with语句,包含with语句的代码在严格模式中会抛出异常。所以使用严格模式的第一步:确保你的代码中没有使用with。
// 在严格模式中以下JavaScript代码会抛出错误
with (location) {
    alert(href);
}

       防止意外为全局变量赋值
       其次,局部变量在赋值前必须先进行申明。在启用严格模式之前,为一个未申明的局部变量复制时会自动创建一个同名全局变量。这是Javacript程序中最容易出现的错误之一, 在严格模式中尝试这么做时会有显性的异常抛出。
// 严格模式下会抛出异常
(function() {
    someUndeclaredVar = "foo";
}());

       函数中的THIS不再默认指向全局
       严格模式中另一个重要的变化是函数中未被定义或为空( null or undefined)的this不在默认指向全局环境(global)。这会造成一些依赖函数中默认this行为的代码执行出错,例如:
标签: javascripteval

更多 javascript 相关资讯

Javascript是实现HTML5强大功能的重要语言

Javascript是实现HTML5强大功能的重要语言

很长时间以来,JavaScript在我眼里都是编程语言中的二等公民。早先,它经常是很多安全问题的发源地,就像是胶水一样,它能把HTML应用与样式 粘到一块,可没有人拿它来正正规规

Javascript SDK:轻松开发HTML5应用的必备工具

Javascript SDK:轻松开发HTML5应用的必备工具

运算平台 Parse最新发布Javascript SDK,有了它,开发HTML 5应用变得更加简单轻松。Parse 是由Y Coumbinator所孵化的创业公司,开发者能够在上面创建自己的应用,Parse

HTML5之美

如今大热的HTML5到底美在哪里?HTML5到底能为实际的移动开发带来哪些改变?来自阿里云云手机服务运营部的前端开发工程师正邪 (廖健)分享了他眼中的HTML5之美,主要讲诉HTML5

深入解析跨平台工具:背后技术、对应开发阶段及垂直发展

深入解析跨平台工具:背后技术、对应开发阶段及垂直发展

在本系列的第一篇文章(跨平台领域的淘金潮——为什么跨平台领域工具会改变现状)中,为大家介绍了跨平台工具产生的背景以及其粗略的介绍。 那么接下来,究竟选择We

用HTML5开发移动应用的5个警告

用HTML5开发移动应用的5个警告

据国外媒体报道,知名科技博客读写网(ReadWriteWeb)日前发表文章,探讨了用HTML5开发移动应用的一些问题,以下为全文摘要: HTML5 改变了开发人员创建移动Web应用的方

16 个印象深刻的 HTML5/CSS3/JavaScript 体验

16 个印象深刻的 HTML5/CSS3/JavaScript 体验

如果你是一个 Canvas、WebGL 和交互式 CSS3, HTML5 以及 Javascript 的粉丝,那你可能会听说来自瑞典的 Web 开发者 Hakim. Hakim 非常擅长 Web 动画和交互,他有很多关于 HTML5

JavaScript,只有你想不到

JavaScript,只有你想不到

很长时间以来,JavaScript在我眼里都是编程语言中的二等公民。早先,它经常是很多安全问题的发源地,就像是胶水一样,它能把HTML应用与样式粘到一块,可没有人拿它来正正规规地写程

Visual Studio 11增强HTML5和JS的支持

Mads Kristensen 在 TechDays 2012 海牙站上发表了一场很有趣的演讲,演讲内容是关于在 Visual Studio 11 和 ASP.NET 4.5 中所有的新功能和新选项。   然而,当我们浏览这

3款“核”手机浏览器性能大比拼

3款“核”手机浏览器性能大比拼

随着3G上网的普及和移动设备端性能的大幅提升,用户对手机浏览器提出了越来越高的要求,移动互联网的入口之争也因此愈发激烈。目前国内不少手机浏览器厂商如UC、QQ等都自称推出

HTML5 Canvas标签属性及发展历史

Canvas标签被很多的工程师认为是HTML5最伟大的改进之一,因为它可以让我们在不使用图片的情况下实现网页的图形设计。 Canvas元素是为了客户端点阵图形而设计的。它自己没有行

更多 eval 相关资讯