ECMAScript 5

JavaScript语言的核心部分(不包含DOM、BOM和其它宿主对象)是基于ECMAScript标准(简称为ES)来实现的。其中第三版是在1999年正式颁布的,目前大多数浏览器都实现了这个版本。第四版已经废弃了。第三版颁布后十年,2009年12月,第五版才正式颁布。

第五版增加了新的内置对象、方法和属性,但最重要的一项是所谓的“严格模式”(strict mode),这个模式移除了一些语言特性,让程序变得更简单更健壮。比如,对with语句的使用已经争论了很多年,现在在ECMAScript5严格模式中使用with则会报错,而在非严格模式中则是允许的。我们通过一个指令来激活严格模式,这个指令在旧版本的语言实现中被忽略。也就是说,严格模式是向下兼容的,因为在不支持严格模式的旧浏览器中也不会报错。

对于每一个作用域(包括函数作用域、全局作用域或在传给eval()的参数字符串的开始部分),你可以使用这种代码来激活严格模式:

  1. function my() {
  2. "use strict";
  3. // 函数剩余的部分……
  4. }

这样就激活了严格模式,函数的执行会被限制在语言的严格子集的范围内。对于旧浏览器来说,这句话只是一个没有赋值给任何变量的字符串,因此不会报错。

按照语言的发展计划,未来将会只保留“严格模式”。因此,现在的ES5只是一个过渡版本,它鼓励开发者使用严格模式,而非强制。

本书不会讨论ES5新增特性相关的模式,因为在本书截稿时并没有任何浏览器实现了ES5(译注:截止译稿校对时,Chrome/Firefox/IE9+已(部分)实现ES5,具体兼容情况可参考http://kangax.github.com/es5-compat-table/),但本书的示例代码有以下特点,以鼓励开发者向新标准转变:

  • 确保所提供的示例代码在严格模式下不报错
  • 避免使用并明确指出弃用的构造函数相关的属性和方法,比如arguments.callee
  • 针对ES5中的内置模式比如Object.create(),在ES3中做同样的实现