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

ECMAScript 5正式发布的更多相关文章

  1. ECMAScript和JavaScript的区别,ECMAScript发展更新历史,ECMAScript5和ECMAScript6的新特性及浏览器支持情况,ECMAScript 5/ECMAScript 2015正式发布

    ECMAScript和JavaScript的区别 ECMA是European Computer Manufacturers Association的缩写,即欧洲计算机制造商协会.欧洲计算机制造商协会是 ...

  2. ECMAScript正则表达式6个最新特性

    译者按: 还没学好ES6?ECMAScript 2018已经到来啦! 原文:ECMAScript regular expressions are getting better! 作者: Mathias ...

  3. 学不动了,ECMAScript2018都来了

    原文:ECMAScript regular expressions are getting better! 作者: Mathias Bynens: Google V8引擎开发者 译者:Fundebug ...

  4. JavaScript学习之路-为什么要学习JavaScript语法

    版权声明:未经博主允许不得转载 前言 为什么要学习JavaScript语法,没有理由,因为工作需要,也为了成为全栈,那现在还是好好努力学习吧! 发展 说实话,JavaScript很好学也很重要,也很容 ...

  5. js 历史

    原文http://javascript.ruanyifeng.com/introduction/history.html JavaScript的诞生 JavaScript 因为互联网而生,紧随着浏览器 ...

  6. JavaScript 语言的历史

    说明:此类博客来自以下链接,对原内容做了标注重点知识,此处仅供自己学习参考! 来源:https://wangdoc.com/javascript/basic/introduction.html 1.诞 ...

  7. 00.JS前言

    前言: 学习一门编程语言的基本步骤(01)了解背景知识 1.了解背景知识   1)什么是 JavaScript 语言?     JavaScript 是一种轻量级的脚本语言.所谓“脚本语言”(scri ...

  8. 《JavaScript语言入门教程》记录整理:入门和数据类型

    目录 入门篇 js介绍 历史 基本语法 数据类型 概述 null 和 undefined 数值 字符串 对象 函数 数组 本系列基于阮一峰老师的<JavaScrip语言入门教程>或< ...

  9. js入门基础

    JavaScript语言介绍 JavaScript的历史 诞生于1995年,最初名字叫做Mocha,1995年9月改为LiveScript.Netscape公司与Sun公司(Java语言的发明者)达成 ...

随机推荐

  1. Edit显示行号

    Edit显示代码行号 关键点 使用这个类然后关联Edit的变量为 LineNumberEdit类型的 实现过程 //////////////////////////////////////////// ...

  2. SignalR安装以及安装问题

    正常节奏 介绍 SignalR 是 ASP.NET 团队正在开发的一个 Microsoft .NET Framework 库和 jQuery 插件,可能包括在以后版本的 ASP.NET 平台中. 它提 ...

  3. UDF 编写自定函数

    在Mysql的官方文档中有说明如何给Mysql添加新的函数. 添加的函数可分为3种: .自行编写函数的源码,将源码编译成动态库,然后使用Mysql的CREATE FUNCTION语句来将函数添加进My ...

  4. MySQL主主复制+LVS+Keepalived实现MySQL高可用性1

    http://bestvivi.com/2015/09/09/MySQL%E4%B8%BB%E4%B8%BB%E5%A4%8D%E5%88%B6+LVS+Keepalived%E5%AE%9E%E7% ...

  5. 原创C# 枚举 多状态 操作

    C# 中枚举类型是一种值类型,目前(vs2012)还不能用于泛型. 此类型最多的用处是标识一组相同类型的状态量或常量,比如: 状态量 示例一 [Flags] public enum Connectio ...

  6. WPF非轮询方式更新数据库变化SqlDependency(数据库修改前台自动更新)

    上一章节我们讲到wpf的柱状图组件,它包含了非轮询方式更新数据库变化SqlDependency的内容,但是没有详细解释,现在给大家一个比较简单的例子来说明这部分内容. 上一章节: WPF柱状图(支持数 ...

  7. 分享asp.net学习交流社区

    亲们 最近发现一个很好的asp.net学习交流的QQ群——237221223.爱好asp.net的亲们可以加入到大家庭中去哈.大家在一起交流学习

  8. Java基础知识强化之集合框架笔记65:Map集合之集合多层嵌套的数据分析

    1. 为了更符合要求: 这次的数据就看成是学生对象. 传智播客 bj 北京校区 jc  基础班 林青霞 27     风清扬 30      jy  就业班   赵雅芝 28  武鑫 29 sh 上海 ...

  9. mysqldump导出csv格式文件

    mysqldump bstar -t  -T/tmp Nvr  --fields-enclosed-by=\" --fields-terminated-by=, --where=" ...

  10. Docker中开启sshd服务

    ssh服务安装 安装ssh服务 #yum install openssh-server -y 安装passwd(修改密码需要) #yum install passwd -y 修改sshd_config ...