网络编程
位置:首页>> 网络编程>> JavaScript>> JavaScript十二月新标准ECMA262v5快速浏览

JavaScript十二月新标准ECMA262v5快速浏览

  发布时间:2009-12-27 12:56:00 

标签:ECMA,标准,JavaScript

今天终于抽出时间瞟了一眼JavaScript的新标准ECMA262v5,让我欣喜的是,不像是因为过于激进而被废除的v4,这个新标准对JavaScript保留了ECMA262v3时代大部分的语言特性,把重点放在了修补旧标准中被人诟病的问题上,而且加入了许多令人期待的新特性和新功能。因为我还没有很深入研究,这里仅仅是分享我快速浏览时看到的一些主要的亮点和变化,请不要把本文当作一个全面的新旧标准对比,也欢迎大家补充。

1.文档得到改进,官方版本PDF文件带了索引,目录也有了链接。

(虽然跟语言无关……)这份文档使用了pdf的更多特性,阅读起来较之v3方便了不少。

2.v3中描述暧昧的scope chain的概念被去掉,引入了全新的执行上下文概念来解释动态的变量作用域。

scope chain在ECMAv3中一直是块难啃的骨头,本身标准的描述就不够清晰,再加上动态作用域的实现又有些难以理解,很多人都一直因为scope chain问题而苦恼。在v5中,变量作用域的概念被完全更新,采用上下文和outer上下文的概念来解释这个问题。比起原来向scope chain中加入Activation Object的解释方法,这种描述令实现更自由(上下文对象不一定是JavaScript对象,而Activation Object一定是JavaScript对象)

3.引入了strict模式,strict模式提供了禁用一些语言特性以提升性能的潜在可能。

根据我目前的推断,在strict模式模式下JavaScript的变量应该是可以实现为静态寻址的。众所周知,JavaScript运行效率低的原因之一就是动态的变量声明和变量名查找导致的效率问题,而新的标准引入了strict模式使得这一问题得以根本解决,在一些多次调用的核心代码中使用strict模式将大大提高JavaScript的运行效率。当然这些特性还要求语言实现者提供相应支持才行。

4.eval和arguments做为标识符受到了限制。

我想是为了弥补v3将eval和arguments做为普通标识符带来的问题,v5在各个地方都对eval和arguments作出了限制,对它们进行赋值等操作会导致抛出运行时异常。我个人认为现在基本可以将它们等同于关键字看待。

5.JSON被引入标准中

JSON的概念被正式引入了v5,并且有了标准的词法和语法定义。同时,新标准也提供了不同层面内置类型方法来支持JSON,包括Date的toJSON和新引入的JSON对象。

6.引入了属性类型,对象模型描述更加清晰

新标准引入了两种Property类型,一种是普通的存储Value的property,另一种是有Getter和Setter的属性。而v3中略显含糊的对象是“属性无序集合”的概念,随着这样的定义也变得很清晰。

7.引入了Error的子类型

所有Error不再属于同一个Error类型,EvalError, RangeError, ReferenceError, SyntaxError, TypeError 以及 URIError 被引入语言中。

8.更多内置类型的方法

下面是一份新标准中给出的新添加内置类型以及属性列表:

Object.getPrototypeOf, Object.getOwnPropertyDescriptor, Object.getOwnPropertyNames, Object.create, Object.defineProperty, Object.defineProperties, Object.seal, Object.freeze, Object.preventExtensions, Object.isSealed, Object.isFrozen, Object.isExtensible, Object.keys, Function.prototype.bind, Array.prototype.indexOf, Array.prototype.lastIndexOf, Array.prototype.every, Array.prototype.some, Array.prototype.forEach, Array.prototype.map, Array.prototype.filter, Array.prototype.reduce, Array.prototype.reduceRight, String.prototype.trim, Date.now, Date.prototype.toISOString, Date.prototype.toJSON.

我们看到,这份列表中包括了我们期待以久的很多方法。Object扩展实际上开放了更多v3中不可访问的对象特性,包括getter setter enumerable等等都可以。而Array扩展则引入了期待以久的集合操作(比如著名的forEach)。Date.now则是一个小小的修补,比起new Date看起来舒服一些。Function.prototype.bind也在列表当中,这个新的内置函数提供了比目前一些流行的bind更完善和高效的绑定thisValue功能,而且还顺便提供了绑定参数,这是变相的currying实现。

0
投稿

猜你喜欢

  • 孟宪会  由于XML(可扩展标记语言:eXtensible Markup Language)真正的平台无关性,它正在逐渐成为数据传
  • 网站上的Banner条,是网站用来作为盈利或者是发布一些重要的信息的工具。但是它又不能作为网页的主要内容,因为它的主要目的是吸引人的注意力,
  • CSS处理斜角导航条的一个例子,这个是写着测试用的。暂没有实际的应用。斜角处理比较麻烦,主要有两个地方。1、图片处理。2、负数的理解。这两个
  • 俺觉得自 己试着写写sql,调试调试还是有帮助的,读人家sql例子好像读懂了,自己写就未 必思路正确,调试得通,写得简洁。 这篇文字在网上被
  • 好记星不如烂笔头,适时的总结梳理知识让人更轻松愉快。今天总结下学习和开发中遇到的JavaScript执行顺序的问题,今天挖个坑,以后会慢慢填
  • 无论是 DAO 还是 ADO 都有两种从 Recordset 对象中查询记录的方法: Find 方法和 Seek 方法。在这两种方法中可以让
  • 当今越来越多的应用程序迁移到web平台上。由于没有平台的限制和安装的要求,SAAS的模式看起来非常有吸引力。Web应用程序的界面设计,其核心
  • 最近,随着数据库的日益庞大,本来两个差不多的数据库,我开始发现我的数据库查询起来越来越比我朋友网站的慢了,经过初步对照,问题好像出在访问记录
  • 在团队意见PK中,运用对方的知识背景说服对方,这就是技术性击倒。这样通常能把对方驳得哑口无言,我经常被这样击倒,甚至觉得怎么那么多牛逼的设计
  • ORACLE访问SQL SERVER数据库有一篇《Oracle 异构服务实践》讲得很清楚。但里面没有讲如何设置访问多个SQL Server数
  • 方法组成模式方法里的所有语句都必须处在同一个归纳层次上无用的注释让代码自我表白标注为什么这样,而不是如何这样对方法表现进行描述等于重复表现这
  • Microsoft SQL Server 7.0安全问题Microsoft Corporation【「Microsoft SQL Serve
  • 代码如下:Function htmll(mulu,htmlmulu,FileName,filefrom,htmla,htmlb,h
  • 感觉这个东西很常用,很多其它js框架里有,但是太大了,用不了太多,自己写了个。需要的朋友可以参考下。下面是html测试代码:<!DOC
  • 1.将以下代码加入到HEML的<body></body>之间<SCRIPT language=jav
  • PRD的作用之一在于,保留产品设计初衷,期望达到什么样的目的,起到事后验证的效果。产品初衷需要做到利益最大化,找最大的蛋糕,为最大目标人群服
  • mssql的每个varchar、text字段都被自动插入一段js代码,即使删除这段代码,如果没有从源头上解决,几分钟后,js代码就又会自动插
  • IE 开发团队更改了 IE8 的 User-agent ,更改的部分信息如下:IE8 on Windows Vista (Compatibi
  • 在使用ORACLE的过程过,我们会经常遇到一些ORACLE产生的错误,对于初学者而言,这些错误可能有点模糊,而且可能一时不知怎么去处理产生的
  • 还是决定冠上ajax的头衔,毕竟很多人会用这个关键词搜索。虽然我认为这只是个炒作的概念,不过不得不承认ajax叫起来要方便多了。ajax的意
手机版 网络编程 asp之家 www.aspxhome.com