QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

ECMAScript 5 正式发布

  • 2009-12-12
  • 本文字数:1399 字

    阅读完需:约 5 分钟

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

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

在过去的几年,随着 JavaScript 引擎的大力改善,比如 Nitro TraceMonkey ,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 带来新的特性。

2009-12-12 23:1310402
用户头像

发布了 127 篇内容, 共 45.0 次阅读, 收获喜欢 5 次。

关注

评论

发布
暂无评论
发现更多内容

Linux面试最高频的5个基本问题

千锋IT教育

# 靠谱:开源IM项目OpenIM压测程序介绍-自己动手压测性能和稳定性

Geek_1ef48b

玖章算术受邀参加红杉Talk「创新的复利」科技专场,共同探讨云计算的前世今生

数据库 数据复制 数据管理 数据备份 玖章算术

跟着卷卷龙一起学Camera--黑电平Blacklevel

卷卷龙

ISP camera 9月月更

C++学习------cassert头文件的作用与源码学习

桑榆

c++ 9月月更

深耕隐私计算技术,瓴羊DataTrust团队喜获殊荣

瓴羊企业智能服务

基于 xbot 实现微信关键词自动回复

Hanson

微信 微信机器人 自动回复

【CSS】:正常布局流(normal flow)、有趣的浮动(float)

翼同学

CSS 前端 9月月更

华为云快成长GaussDB(for Redis)

IT资讯搬运工

NodeJs小试牛刀--聊天室搭建

zxhtom

9月月更

新书上市 | 连载 5 年,千万读者追更,这本书讲透了通信背后的故事!

图灵社区

通信技术 科技史

关于链路追踪所需要了解的知识

穿过生命散发芬芳

链路追踪 9月月更

实践分享!GitLab CI/CD 快速入门

北京好雨科技有限公司

企业号九月金秋榜 Kuberetes

Web3大行其道,为何说Zebec值得投资人期待?

BlockChain先知

【CSS·清除浮动】Clearing floats:clear、clearfix、overflow、flow-root

翼同学

CSS 前端 9月月更

k8s自定义controller三部曲之一:创建CRD(Custom Resource Definition)

程序员欣宸

Kubernetes k8s 9月月更

高级产品经理必备素养

产品海豚湾

产品经理 职业发展 商业化 9月月更 产品价值

2022-09-01:字符串的 波动 定义为子字符串中出现次数 最多 的字符次数与出现次数 最少 的字符次数之差。 给你一个字符串 s ,它只包含小写英文字母。请你返回 s 里所有 子字符串的 最大波

福大大架构师每日一题

算法 rust语言 福大大

Predicate

急需上岸的小谢

9月月更

【CSS·显示类型】 block、inline以及inline-block

翼同学

CSS 前端 9月月更

万物皆可集成系列:低代码对接企企云实现数据集成

葡萄城技术团队

Nacos 安装教程(史上最详细保姆级教程)

nacos SpringCloud 9月月更

数据可视化系列教程之组件构成

云智慧AIOps社区

前端 低代码 开源项目 数据可视化 可视化大屏

以数字技术赋能产业金融生态能力建设,破解银行的场景焦虑

易观分析

金融 银行 数字科技

如何增强 ABAP 系统,允许开发人员给 ABAP 对象设置标签,方便快速检索

汪子熙

SAP abap Netweaver 标签体系 9月月更

maven入门

楠羽

maven 笔记 9月月更

测试需求平台3-登录打通和产品列表功能实现

MegaQi

测试平台开发教程 9月月更

从用户到开发者是一种思维进化过程 | 访 StarRocks Committer 周威

StarRocks

数据中心网络架构的需求原则及策略

阿泽🧸

数据中心 9月月更

高并发场景下,6种方案,保证缓存和数据库的最终一致性!

C++后台开发

数据库 缓存 高并发 后端开发 C++开发

leetcode 206. Reverse Linked List 反转链表(简单)

okokabcd

LeetCode 数据结构与算法

ECMAScript 5正式发布_Java_Alex Blewitt_InfoQ精选文章