BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

ECMAScript 5正式发布

| 作者 Alex Blewitt 关注 4 他的粉丝 ,译者 张凯峰 关注 1 他的粉丝 发布于 2009年12月14日. 估计阅读时间: 5 分钟 | 如何结合区块链技术,帮助企业降本增效?让我们深度了解几个成功的案例。

这周ECMAScript 5也即众所周知的JavaScript正式发布了(pdf),在给基本库带来更新的同时,还引入了更加严格的运行时模型,来帮助定位并移除通常的代码错误。

而早期对于ECMAScript 4的标准化工作基本就算是失败了;只有Adobe的ActionScript是基于建议的变化的。ECMA甚至都没有发布一个版本4的规范,因为不同的组织对于发展的进度并不满意;就这样,也没有浏览器来支持它了。

在过去的几年,随着JavaScript引擎的大力改善,比如NitroTraceMonkey,JavaScript已经极具性能,以Google Wave为代表的在线协作应用可以证明这一点。甚至还有伴随GWT 2.0发布的Google Chrome扩展Speed Tracer,来帮助优化JavaScript应用的性能。

从这点上来讲,ECMAScript 5旨在和当前的ECMAScript 3版本保持向后兼容(以寻求在不同浏览器上更快速的采用),并对开发者提供了更加严格的限制来避免通常的编码陷阱。

严格模式

严格模式的引入,目的在于避免ECMAScript应用中通常的代码问题。这是通过在单元(脚本或函数)上指定一句话来达到的:

"use strict;"

这句话不会对已有的运行时产生什么影响,但版本是5的新运行时就会为整个脚本(如果这句话定义在脚本开头)或者单个函数(如果定义在函数的开头)打开严格模式。这样就允许计划中的既有代码对严格模式和非严格模式的混合使用。那么,严格模式意味着什么呢?

  • 变量在使用前必须声明。换句话说,i=3这下就是个运行时错误了;需要var i=3(如果i在做作用域里面没有定义过)
  • eval变成保留字,而从eval引入的新变量不再有效,因此eval("var i=3"); print(i);现在会抛出错误。
  • 不再使用八进制;所以010就是十,不再是八。
  • 如果configurable被设置成false,delete就不能使用在参数、函数、变量或者其他属性上。
  • 一般会带来错误的with语句,将不再使用,会被认为是语法错误。
  • 函数不再能使用具有相同名称的重复参数。
  • 对象不再能使用具有相同名称的重复属性。
  • arguments和caller变量不再可变。
  • 对全局对象的访问将会是运行时错误。

库扩展

基本库中的其他扩展包括:

  • Date现在可以支持生成ISO8601格式的日期(比如20091209T12:34:56Z),并可以解析。
  • String现在有内建的trim()方法
  • 新添JSON对象包括parse和stringify方法来支持JSON数据的高效生成;就像eval,但在减少代码时不会带来安全影响。另外,不仅仅可以使用RFC 4627中的JSONObject和JSONArray,还可以使用JSONValue。(RFC 4627把JSON-Text限制成一个对象或者数组)
  • 新添bind内建方法,就跟Prototype的bind方法的语义一样。
  • 数组现在可以支持indexOf(),map(),filter()和reduce()。
  • 对象现在有seal()方法(防止添加新的属性和删除既有属性)和freeze()方法(使得所有属性变成只读,同时防止新添属性或删除属性)
  • Object.keys()可以列出所有能列举的对象属性。
  • Object.getOwnPropertyNames()可以列出所有能列举和不能列举的属性。
  • Object.getPrototypeof()可以得到指定对象的prototype属性。

总结

新增的标准JSON对象解析机制和严格模式将会让开发者受益良多,使得转化成Prototype和其他扩展库需要的更小型库成为可能。从JSON流解析出ISO日期现在要变得比以前方便很多,而且看起来会成为将来日期表示事实上的标准。最后,因为这次是向后兼容的,并从Prototype这样既有库获得灵感,开发者和web浏览器很有可能在不久将来会为JavaScript带来新的特性。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

根据木桶理论,现在还是不能使用这些新特性呀 by im Kevin

当IE6还是占大部分市场份额的时候,为了兼容性,我们还是不得不按照老的写法来写代码。新的标准只能增加我们写代码的痛楚而已

Re: 根据木桶理论,现在还是不能使用这些新特性呀 by zhang pengyu

什么理论???
IE6已经死了。。除了该死的企业而已。。不要再去支持ie6这个stupid的产品了

Re: 根据木桶理论,现在还是不能使用这些新特性呀 by Jeffrey Zhao

在国内,普通用户也已经抛弃IE 6了吗?

Re: 根据木桶理论,现在还是不能使用这些新特性呀 by 张 凯峰

根据上月淘宝的记录数据,IE6略降,但依旧占据70%左右,IE7/8 ,Safari 略升,Fx略降,整体并没有令人欣喜的变化。

这是淘宝工程师得到的数据。

Re: 根据木桶理论,现在还是不能使用这些新特性呀 by 张 凯峰

什么理论???
IE6已经死了。。除了该死的企业而已。。不要再去支持ie6这个stupid的产品了


呵呵,只有做企业应用的人,才会感受这么深!

Re: 根据木桶理论,现在还是不能使用这些新特性呀 by Deng Tony

同感

Re: 根据木桶理论,现在还是不能使用这些新特性呀 by Sheng Tian

用库包装一下,支持新标准就用,不支持就在库里实现

Re: 根据木桶理论,现在还是不能使用这些新特性呀 by Lee Ronnin

淘宝 有种别用activex,我就不可以不用IE!

ecmascript 合集 by haijing yan

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

9 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT