zoukankan      html  css  js  c++  java
  • ECMAScript 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带来新的特性。

    如果感觉不错,请 一个!
    by simpman
  • 相关阅读:
    Yield Usage Understanding
    Deadclock on calling async methond
    How to generate file name according to datetime in bat command
    Run Unit API Testing Which Was Distributed To Multiple Test Agents
    druid的关键参数+数据库连接池运行原理
    修改idea打开新窗口的默认配置
    spring boot -thymeleaf-url
    @pathvariable和@RequestParam的区别
    spring boot -thymeleaf-域对象操作
    spring boot -thymeleaf-遍历list和map
  • 原文地址:https://www.cnblogs.com/simpman/p/3596617.html
Copyright © 2011-2022 走看看