JavaScript 各版本介绍和特性

JavaScript 1.1

Netscape Navigator 3.0在1996年8月19发布,是支持JavaScript的浏览器的第二个主要的版本。

1.1 新特性

新增的对象

  • Array
  • Boolean
  • Function
  • Number

新增的属性

  • Number.MAX_VALUE
  • Number.MIN_VALUE
  • NaN
  • Number.NEGATIVE_INFINITY
  • Number.POSITIVE_INFINITY

新增的方法

  • Array.prototype.join()
  • Array.prototype.reverse()
  • Array.prototype.sort()
  • Array.prototype.split()

新增的操作符

  • typeof
  • void

其他新特性

  • LiveConnect. Java and JavaScript之间的通信.

1.1修改的功能

  • “对象删除”:你可通过以设置对象的引用为null来删除一个对象。
  • 增加了对象的构造函数和原型属性
  • eval() 现在是每一个对象的方法(之前是一个内置函数),它能够在指定对象的上下文执行一个JavaScript代码的字符串。
  • Math.random()现在能在所有平台上工作。
  • toString():新增了基数作为参数,用于指定表示数值时的进制。
  • isNaN() 现在能在所有平台上工作。 (不再是只能在Unix下工作)
  • 当parseFloat() 和 parseint()指定的字符串(参数)的第一个字符无法转换为数字时,在所有平台都会返回NaN。(在这之前发布的版本里,在Solaris和Irix下它们会返回NaN,而在其他平台会返回0)

JavaScript 1.2

Netscape Navigator 4.0在1997年6月11日发布,它是是支持JavaScript的浏览器的第三个主要的版本。

1.2 新特性

新增的对象

  • 可以使用简明的字面记号来创建对象。(灵感来自Python 1.x的dictionary的简明语法)
  • 数字也可以使用简明的字面记号来创建。(灵感来自Python 1.x的字list的简明语法)
  • arguments

新增的属性

  • Function.arity

新增的方法

  • Array.prototype.concat()
  • Array.prototype.slice()
  • String.prototype.charCodeAt()
  • String.prototype.concat()
  • String.fromCharCode()
  • String.prototype.match()
  • String.prototype.replace()
  • String.prototype.search()
  • String.prototype.slice()
  • String.prototype.substr()

新增的操作符

  • delete
  • Equality operators (== and !=)

新增的语句

  • Labeled 语句
  • switch
  • do...while
  • import
  • export

其他新特性

  • Regular Expressions
  • Signed scripts

1.2 修改的功能

  • 现在你可以在函数内部嵌套函数。
  • Number现在可以将指定的对象转换为数字。
  • 如果x是一个不包含格式良好的数字字面的字符串,Number将会生成一个NaN而不是一个错误。
  • Stirng现在可以将指定的对象转换为字符串。
  • Array.prototype.sort() 现在能在所有平台上工作。它不会再将未定义的元素转换为null并且排序到数组最大的位置。
  • String.prototype.split()
    • 它即可以带一个确定的字符串参数去分割目标字符串,也可以带一个正则表达式参数。
    • 它可以带一个限制的数量,这样可以让最终的结果数组不再包含在这之后的空元素。
  • String.prototype.substring(): 不再要求第二个索引值大于第一个。
  • toString(): 现在可以把对象或者数组转换为文字。
  • break 和continue 语句现在可以在带标签的语句中使用。

JavaScript 1.3

Netscape Navigator 4.5是在1998年10月19日发布的。

1.3 新特性

新增的全局变量

  • NaN
  • Infinity
  • undefined

新增的方法

  • isFinite()
  • Function.prototype.call()
  • Function.prototype.apply()
  • Date.UTC()
  • Date.prototype.getFullYear()
  • Date.prototype.setFullYear()
  • Date.prototype.getMilliseconds()
  • Date.prototype.setMilliseconds()
  • Date.prototype.getUTCFullYear()
  • Date.prototype.getUTCMonth()
  • Date.prototype.getUTCDate()
  • Date.prototype.getUTCHours()
  • Date.prototype.getUTCMinutes()
  • Date.prototype.getUTCSeconds()
  • Date.prototype.getUTCMilliseconds()
  • Date.prototype.toUTCString()
  • Date.prototype.setUTCFullYear()
  • Date.prototype.setUTCMonth()
  • Date.prototype.setUTCDate()
  • Date.prototype.setUTCHours()
  • Date.prototype.setUTCMinutes()
  • Date.prototype.setUTCSeconds()
  • Date.prototype.setUTCMilliseconds()

其他新特性

  • 严格的相等运算符
  • 支持Unicode
  • 介绍了一种JavaScript的控制台

JavaScript 1.3 修改的功能

  • 修改 Date 使之符合 ECMA-262
    • 新的构造函数: Date(year, month, day, [,hours [, minutes [, seconds [, milliseconds ]]]])
    • 附加的方法参数
      • setMonth(month[, date])
      • setHours(hours[, min[, sec[, ms]]])
      • setMinutes(min[, sec[, ms]])
      • setSeconds(sec[, ms])
  • 数组的长度(属性的长度)现在类型为32位 unsigned 整型。
  • Array.prototype.push(): 在JavaScript 1.2中, push 方法返回最后一个被添加到数组的元素。在JavaScript 1.3下, push 返回数组新的长度。
  • Array.prototype.slice(): 在JavaScript 1.2中, 如果只有一个元素被移除(howMany 参数为1,splice方法返回被移除的元素。而在JavaScript 1.3,splice方法通常返回一个包含被删除的元素的数组。如果只有一个元素被移除,则返回一个只包含一个元素的数组。
  • String.prototype.replace()的变化。
  • Boolean 对象的变化。
  • toString()的变化。

JavaScript 1.4的新特性

下面是 JavaScript 1.4 的更新记录,它只可用于 1999 年发布的 Netscape 服务端 JavaScript。 旧的 Netscape 文档可在 archive.org 找到。

  • 异常处理 (throw 和 try...catch)
  • in 运算符
  • instanceof 运算符

JavaScript 1.4的功能改动

  • eval() 的改动 (不能被间接唤起,也不再是Object的一个方法)
  • arguments 不再是函数的属性
  • 废除了 Function.arity 以支持 Function.length
  • LiveConnect 的改动

JavaScript 1.5 新特性

以下为JavaScript 1.5 的更新日志。该版本包含在发行于2000年11月14日的Netscape Navigator 6.0中,也在后续的的Netscape Navigator版本和Firefox 1.0中使用。你可以拿JavaScript 1.5 和JScript version 5.5,Internet Explorer 5.5进行比较,后者发行于2000年7月。相应的ECMA 标准是 ECMA-262 Edition 3版 (自1999年12月)。

  • Number.prototype.toExponential()
  • Number.prototype.toFixed()
  • Number.prototype.toPrecision()
  • const
  • try...catch 语句中支持多个catch语句。
  • JavaScript 开发者可以为对象添加getter和setter

JavaScript 1.5 功能变化

  • 运行时错误现在作为异常报告。
  • 正则表达式变化:
    • 数量修饰符 — +, *, ? 和 {} — 现在可以跟在 ? 后强行使其变为非贪婪模式。
    • "非捕获括号 "(?:x) 可以用来代替“捕获括号” (x)。当使用非捕获括号的时候反向引用不可用。
    • 支持正负向零宽断言。它们都会根据紧跟着字符串的内容进行断言。
    • 添加m标记说明正则表达式可以匹配多行。
  • 函数可以在if语句中声明。
  • 函数可以在表达式中声明。

JavaScript 1.6新特性

以下是JavaScript 1.6的更新日志。JavaScript 1.6已经被包含在2005年11月发布的Firefox 1.5 (Gecko 1.8)中。JavaScript 1.6相对应的ECMA标准是ECMA-262第3版和ECMAScript for XML (E4X),这让它拥有了一些额外的特性 。引入了一些新特性:E4X,几个新的数组方法,还有数组和字符串的通用接口(generics)。

JavaScript 1.6新特性

  • 使用JavaScript创建和处理XML内容的ECMAScript for XML (E4X) 的支持文档已经添加。 更多详情:使用E4X处理XML。
  • Array.prototype.indexOf()
  • Array.prototype.lastIndexOf()
  • Array.prototype.every()
  • Array.prototype.filter()
  • Array.prototype.forEach()
  • Array.prototype.map()
  • Array.prototype.some()
  • Array generics
  • String generics
  • for each...in

JavaScript 1.6功能变化

  • 产生了一个bug,当形参或实参的数量已经固定了,若 arguments[n] 中的n大于这个数量,就不能被设置。

JavaScript 1.7是一个引出了一些新特性的语言更新,尤其是generator,iterator,数组推导式, let 表达式和解构赋值。

为了使用 JavaScript 1.7的一些新特性,你需要明确指出你希望使用 JavaScript 1.7。在HTML 或XUL code中,使用:

JavaScript 1.7的新特性

以下是javaScript 1.7版本的更新日志,这个版本被包括在 Firefox 2 (2006年10月)。

JavaScript 1.7是一个引出了一些新特性的语言更新,尤其是generator,iterator,数组推导式, let 表达式和解构赋值。

以下JavaScript 1.7的新特性目前还不是ECMA-262标准的一部分。在最近的Firefox版本中会根据ECMAScipt6中的描述来实现这些功能。具体内容见这些参考页面。

  • Iterators and generators
  • Array comprehensions
  • let 声明(Gecko 41中抛弃了 let 声明,见 bug 1023609)
  • const 声明
  • 解构赋值(Gecko 40中不再支持JS1.7风格的for-in解构,见bug 1083498)

JavaScript 1.8新特性

  • Expression Closures.
  • 生成器表达式。生成器表达式可以让你方便地创建生成器(在JavaScript1.7中引入)。通常你需要创建一个内含yield的自定义函数来得到一个生成器,而生成器表达式可以让你使用类似数组的语法来达到同样的目的。
  • Array.prototype.reduce()
  • Array.prototype.reduceRight()

JavaScript 1.8功能更新

对for..in解构的修改

JavaScript1.8中的一个修改是对JavaScript1.7中引入的数组键值结构相关的bug修复。之前可以用for ( var [key, value] in array )的方式来解构一个数组的键值。但是,这也让对数组的数组的键值解构变得不可能(比如一个迭代器返回一个当前键值对的数组)。现在这个问题可以用for ( var [key, value] in Iterator(array))来解决([bug 366941](https://bugzilla.mozilla.org/show_bug.cgi?id=366941 "FIXED: Get rid of the "for([key, value] in obj)" form so that normal array destructuring works in for..in"))。

JavaScript 1.8.1 新特性

  • Object.getPrototypeOf()
  • 原生支持 JSON
  • String.prototype.trim()
  • String.prototype.trimLeft()
  • String.prototype.trimRight()
  • String.prototype.startsWith()

JavaScript 1.8.1 功能更新

对象和数组初始化器中的属性隐式设置不再在 JavaScript 中执行 setter。 这使得设置属性值的行为更具可预测性。

JavaScript 1.8.5的新特性

新函数

Function Description
Object.create() 使用指定的原型对象和属性. bug 492840
Object.defineProperty() 为对象添加给定的描述信息的属性名.
Object.defineProperties() 为对象添加多个给定的描述信息的属性名.
Object.getOwnPropertyDescriptor() 返回对象的指定属性名的描述信息. bug 505587
Object.keys() 返回由对象的所有可枚举属性组成的数组. bug 307791
Object.getOwnPropertyNames() 返回由对象的所有可枚举和不可枚举属性组成的数组. bug 518663
Object.preventExtensions() 防止对象进行任意的扩展. bug 492849
Object.isExtensible() 判断对象是否可以扩展. bug 492849
Object.seal() 防止其他代码删除对象的属性. bug 492845
Object.isSealed() 判断对象是否是密封(即禁止删除属性)的. bug 492845
Object.freeze() 冻结一个对象: 其他代码不能删除或修改任何属性. bug 492844
Object.isFrozen() 判断对象是否是冻结的. bug 492844
Array.isArray() 判断变量是否是数组. bug 510537
Date.prototype.toJSON() 返回一个Date对象用JSON格式化的字符串.
Function.prototype.bind() 创建一个新函数,当这个函数被调用时,函数会使用提供的上下文环境(给定的字符序列) bug 429507

ECMAScript5新特性

  • get 和 set 操作现在允许标识为数值或字符串. [bug 520696](https://bugzilla.mozilla.org/show_bug.cgi?id=520696 "FIXED: Implement support for |{ get "string literal"() { /* ... / }, get 5.4() { / ... */ }, 6.72: 3 }|")
  • Function.apply() 能接受任意的类数组的对象作为参数列表,而不是只支持真正数组.
  • 支持严格模式
  • Array.toString() 现在允许在非数组上使用,如果允许则会返回调用其 join() 方法,否则调用 toString() 方法.

JavaScript 1.8.5中功能变化

  • ISO 8601 在Date中支持: Date 对象的 parse() 方法现在支持简单的ISO 8601 格式化时间字符串.
  • 全局对象变为只读: 按照ECMAScript 5 标准,NaN, Infinity, 和 undefined 全局对象变为只读.
  • obj.parent and obj.count 过时. 部分原因如下:: SpiderMonkey change du jour: the special parent property has been removed bug 551529 & bug 552560.
  • JSON.parse()不再支持逗号结尾.

其他

ECMAScript 5的支持情况

5.1,JavaScript 基于的标准的一个旧版本,在2011年6月被批准。

http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

ES2015

6 th Edition / June 2015
https://www.ecma-international.org/publications/standards/Ecma-262.htm
https://www.ecma-international.org/ecma-262/6.0/index.html

ES2016

7 th Edition / June 2016
https://www.ecma-international.org/publications/standards/Ecma-262.htm
https://www.ecma-international.org/ecma-262/7.0/index.html

参考

JavaScript更新
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/New_in_JavaScript

你可能感兴趣的:(JavaScript 各版本介绍和特性)