写点什么

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:1310520
用户头像

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

关注

评论

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

权威媒体评选:2023年25个最佳开源软件

SEAL安全

开源 AI LLMs

PD虚拟机系统镜像 原版纯净的Windows系统安装包

Rose

windows 11 pd虚拟机 win系统下载

Programming Abstractions in C阅读笔记:p248-p253

codists

DRM音频格式转换好帮手-NoteBurner iTunes DRM Audio Converter 兼容M1和macos14系统

Rose

DRM 音频转换器

数值计算: 精度、溢出、舍入

西格玛

有挑战才有收获!PaddleOCR算法模型挑战赛火热开启!

飞桨PaddlePaddle

人工智能 算法 大赛 百度飞桨 算法模型

应用监控 eBPF 版:实现高效协议解析的技术探索

阿里巴巴云原生

阿里云 云原生 可观测

如何从 Jira 成功迁移到极狐GitLab,看这个就够了!

极狐GitLab

uniapp+unicloud开发一个网页端,小程序端,APP端,桌面端的博客CMS系统——万能的三三

万能的三三

JavaScript 小程序 uni-app CMS 博客

华为云云绘本第2期:面对等保三级,谁还在瞎折腾?

华为云PaaS服务小智

软件开发 华为云

Live Home 3D Pro for Mac(苹果电脑3D室内家居设计软件)

Rose

Mac软件 Live Home 3D Pro 家居设计软件 Live Home 室内设计

CDP技术系列(三):百万级QPS的人群命中服务接口性能优化指南

京东科技开发者

左耳听风 - 时间管理「读书打卡 day 15」

Java 工程师蔡姬

读书笔记 程序员 个人成长 时间管理 职业发展

融合创新:传统企业数字化转型的业务、战略、操作和文化变革

天津汇柏科技有限公司

数字化转型

mac系统u盘启动盘制作教程,更新至macOS Sonoma 14

Rose

mac系统

数仓如何递归查询视图依赖

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 华为云GaussDB(DWS)

光纤的跳线和尾纤

小齐写代码

CDP技术系列(一):使用bitmap存储数十亿用户ID的标签或群体

京东科技开发者

K8s集群CoreDNS监控告警最佳实践

华为云开发者联盟

开发 华为云 k8s集群 华为云开发者联盟

Mac上超好用的鼠标平滑滚动增强工具:SmoothScroll

Rose

Mac软件 鼠标工具 SmoothScroll 平滑滚动

CDP技术系列(二):ClickHouse+Bitmap实现海量数据标签及群体组合计算

京东科技开发者

什么是网络地址转换协议

郑州埃文科技

【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(排查问题指令 - 下)

码界西柚

Linux 日志处理 Shell指令 查询日志 2024年第二十篇文章

用Python实现高效数据记录!Web自动化技术助你告别重复劳动!

测试人

软件测试

2024-01-24:用go语言,已知一个n*n的01矩阵, 只能通过通过行交换、或者列交换的方式调整矩阵, 判断这个矩阵的对角线是否能全为1,如果能返回true,不能返回false。 我们升级一下:

福大大架构师每日一题

福大大架构师每日一题

夏志刚介绍

管理在线

企业战略管理体系 企业精益管理体系 企业创新管理类体系 企业培训体系 企业标准化管理体系

BricsCAD 24 mac中文完美破解版(CAD建模软件) 支持M和 macOS Sonoma 14 附安装教程

Rose

BricsCAD 23中文版 cad bricscad 24 BricsCAD 24破解版 BricsCAD 24下载

一篇全掌握!TDengine 在能源、电力、汽车、物流、工业制造等十大行业应用合集

TDengine

tdengine 时序数据库

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