ECMAScript 5正式发布

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

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

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

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

严格模式数组

严格模式的引入,目的在于避免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变量再也不可变。
  • 对全局对象的访问将会是运行时错误。

库扩展app

基本库中的其余扩展包括:ecmascript

  • 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带来新的特性。

相关文章
相关标签/搜索